我正在尝试编写一个程序,从Prolog中的列表中删除最后一个元素 . 我不应该在这里使用内置谓词,除了member / 2 . 我明白我必须为此使用递归 . 但我对它并不是很好 . 我得到了这个,但它失败了:
% remove_last/3 with (Element, List, Resultlist)
remove_last(X,[X|T],NT):-
remove_last(X,T,NT).
我认为Prolog应该削减列表的头部,扫描尾部,重新执行直到尾部与Element匹配,删除并恢复剩余列表 . 但我不知道如何把它放在代码中 . 我会很感激任何提示!
1 回答
这是一个更易读的答案:
显然它使用的内置插件显然是被禁止的,但我认为
dif/2
非常重要,它可能被认为是合法的,例如\+
对于这样的事情(maplist
也一样) .它表现得非常好:
如果所有内容都是变量,那么它可以正常工作但不能正确枚举答案:
您可以使用
length/2
使其正确枚举答案:运行时间
在1000个随机数字的列表上: