ListがTListでTimes回繰り返される場合に true である述語 rep( ?List , ?Times , ?TList ) が必要だとします(たとえば、)。2 つの引数がインスタンス化されている限り、これは機能するはずです。ここで、やや機能するバージョン:rep([a,c],2,[a,c,a,c])
rep(_,0,[]).
rep(List,1,List).
rep(List,Times,TList) :- integer(Times), Times>1,
succ(RemTimes,Times), append(List,RemList,TList),
rep(List,RemTimes,RemList).
rep(List,Times,TList) :- var(Times),
append(List,RemList,TList),
rep(List,RemTimes,RemList), !,
succ(RemTimes,Times).
2 つの質問:
- それを行う組み込みの(私が見つけることができない)ものはありませんか?
- これを行うより簡単な方法はありますか?最後の句を取り除くのが好きですか?Timesがインスタンス化されていない場合のTimesとRemTimesの関係を表現する方法が見つからなかったため、必要です。