我是prolog的新手,我试图解决这个问题

时间:2016-12-22 14:32:14

标签: prolog logic

如何使用Prolog谓词is_repeated(X)定义列表,以便任何列表的结果为true,如果它包含重复的元素。

1 个答案:

答案 0 :(得分:0)

首先,如果“is_repeated(X)使任何列表的结果为真,如果它包含重复的元素,则很奇怪。”如果is_repeated(List)包含重复元素,您会说“List成立。”你需要从parts bin来解决这个问题的部分是递归和member/2memberchk/2,或select/3没有显式递归,但让我们来谈谈Prolog编程。因为我觉得Prolog真的很整洁,而Prolog整洁的本质就是你可以采取这样一个愚蠢的问题而只是将问题陈述翻译成Prolog代码,而不必告诉Prolog如何做这项工作。 / p>

例如,假设您的查询类似于“如果List仅包含偶数,则only_evens(List)成立。”好吧,假如我的even/1如果它的论证是偶数则是真的。然后forall(member(X, List), even(X))将是一个简单的翻译。如果我们首先将问题翻译成逻辑形式,那将更加明显:∀xεL,even(x)。现在,∀xεL,F(x)和forall(member(X, L), F(X))之间的关系应该是显而易见的。

所以你应该问自己的真正问题是,问题的逻辑表述是什么?我想它会听起来像这样:假设L是一个元素X前面的列表L'。如果X出现在L'中,则L包含重复项。这是一种解决问题的好方法。现在可以将其转换为Prolog吗?