Prolog:添加要设置的列表
下面的谓词将项目 X 添加到列表 S 中。它工作得很好。
addToSet(X, S, S) :-
atomic(X),
member(X, S),
!.
addToSet(X, S, [X|S]) :-
atomic(X).
我试图将其扩展到一个谓词,该谓词添加列表 [H|T] 来设置 S。如果 [H|T] 只有 2 个项目长,那么它就很完美......即如果 T 也是原子的。
addToSet([], S, S).
addToSet([H,T], S, S2) :-
addToSet(H, S, S1),
addToSet(T, S1, S2).
例如,addToSet([5,6],[1,2,3,4],X)。按我的意愿工作。但是,addToSet([5,6,7],[1,2,3,4],X)。根本不起作用。我很困惑...我的代码的最后 2-3 行显然有问题,但我无法弄清楚。有什么建议吗?
谢谢!
The below predicate adds item X to list S. It works fine.
addToSet(X, S, S) :-
atomic(X),
member(X, S),
!.
addToSet(X, S, [X|S]) :-
atomic(X).
I am trying to extend it to a predicate which adds list [H|T] to set S. It works perfect if [H|T] is only 2 items long... i.e. if T is also atomic.
addToSet([], S, S).
addToSet([H,T], S, S2) :-
addToSet(H, S, S1),
addToSet(T, S1, S2).
For example, addToSet([5,6],[1,2,3,4],X). works as I desire. However, addToSet([5,6,7],[1,2,3,4],X). does not work at all. I am stumped... there is obviously something wrong with the last 2-3 lines of my code, but I cannot figure it out. Any tips?
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
addToSet([H,T], S, S2)
应该是addToSet([H|T], S, S2)
。事实上,您匹配的是一个完全包含H
和T
的列表,而不是一个包含头H
和尾T< 的列表。 /代码>。看起来只是一个错字。
addToSet([H,T], S, S2)
should beaddToSet([H|T], S, S2)
. As it is, you're matching a list containing exactlyH
andT
, not a list with headH
and tailT
. Looks like just a typo.