创建“删除成员”;序言中的函数
我是 Prolog 新手,我正在尝试创建一个函数,该函数将简单地从列表中删除元素的所有实例。以下代码是我到目前为止所拥有的:
remove([H|T], E, L2) :- (\+ ([H|T] == []) ->
(H == E
-> remove(T, E, L2)
; append(L2, H, L2), remove(T, E, L2)
)
; append(L2, [])
).
当我运行此代码时:
remove([1,2,3,4,5], 3, L2).
我收到错误:
ERROR: Out of global stack
有人能指出我为什么会遇到此问题吗?
I am new to Prolog and I'm trying to to create function that will simply remove all instances of an element from a list. The following code is what I have so far:
remove([H|T], E, L2) :- (\+ ([H|T] == []) ->
(H == E
-> remove(T, E, L2)
; append(L2, H, L2), remove(T, E, L2)
)
; append(L2, [])
).
When I run this code on:
remove([1,2,3,4,5], 3, L2).
i get an error:
ERROR: Out of global stack
Could someone point me to why I am getting this problem?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这一说法
永远不可能成立,因为空列表永远不可能与包含至少一个元素的列表相同。
This statement
can never be true because an empty list can never be identical to a list that contains at least one element.
您需要的是 SWI 的 subtract 谓词:
What you need is a SWI's subtract predicate: