假设我需要一个谓词 rep( ?List , ?Times , ?TList ),如果List在TList中重复Times次,则该谓词为真(例如,)。只要实例化了两个参数,它就应该起作用。这是一个有点工作的版本: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).
两个问题:
- 是不是有一些内置的(我找不到)可以做到这一点?
- 有没有更直接的方法来做到这一点?就像摆脱最后一个子句一样?这是必要的,因为当Times没有实例化时,我找不到表达Times和RemTimes之间关系的方法。