1
我有一个谓词next
实质上是从列表中删除数字,试图减少列表的整体大小。删除重复在回溯
因此,例如,我有一个列表:
[3,2,1]
接下来会从列表中删除某些值,所以它会返回类似这样
[3,2] or [3,1] or [3] or [2,1] etc
我运行一个脚本找到所有可能的动作:
findall(T, next([2,3], T), U).
问题是重复值的列表,如:
L = [1,1,1,1].
通话
findall(T, next([1,1,1,1], T), U).
将统一U
与[[1,1,1], [1,1,1], [1,1,1], [1,1,1]]
有没有办法让Prolog的理解,它是相同的输出多次回国?
next([_ | T], T).
next([H | Tin], [H | Tout]) :-
next(Tin, Tout).
该做到的,但它是一个有点哈克修复,我期待在未来谓词 – user3667111
的改变@ user3667111 - 如果你要求改变它,你应该告诉我们你的'下一个/ 2' – max66
当然,我已经添加到编辑 – user3667111