Prolog:添加要设置的列表

发布于 2024-12-03 02:38:05 字数 510 浏览 0 评论 0原文

下面的谓词将项目 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

绅士风度i 2024-12-10 02:38:05

addToSet([H,T], S, S2) 应该是 addToSet([H|T], S, S2)。事实上,您匹配的是一个完全包含 HT 的列表,而不是一个包含头 H 和尾 T< 的列表。 /代码>。看起来只是一个错字。

addToSet([H,T], S, S2) should be addToSet([H|T], S, S2). As it is, you're matching a list containing exactly H and T, not a list with head H and tail T. Looks like just a typo.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文