gpt4 book ai didi

list - Prolog - 如何返回每个元素只出现一次的列表?

转载 作者:行者123 更新时间:2023-12-04 07:30:03 25 4
gpt4 key购买 nike

我有一个谓词 set/2 应该将第二个参数实例化为一个列表,其元素只是第一个参数中每个术语的一次出现。到目前为止,我所拥有的是:

set([],OutList).
set([X|InList],OutList) :- \+member(X,InList), append([X], OutList, OutListNew), set(InList,OutListNew).
set([X|InList],OutList) :- member(X,InList), set(InList,OutList).
并调用 set/2:
set([1,1,2,3],X).
返回真。那是一半 - 我希望 X 被实例化为 [1,2,3] - 但我不确定在这种情况下如何使 X 为真。任何帮助和解释将不胜感激。

最佳答案

你的 Prolog 应该警告你有一个 单例 在第一个条款中,即

set([],OutList).
这意味着当执行命中这样的子句时,它 成功 , 但是 OutList仍然不受约束。
现在应该清楚您需要替换 OutList与空列表。
另一个错误位于第二个子句中。 append([X], OutList, OutListNew)应该改为 append([X], OutListNew, OutList) .作为一种风格说明,它可以用这个统一代替: [X|OutListNew]=OutList ,然后移动到头部。

关于list - Prolog - 如何返回每个元素只出现一次的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67996776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com