gpt4 book ai didi

Prolog函数是否包含?

转载 作者:行者123 更新时间:2023-12-02 15:39:45 24 4
gpt4 key购买 nike

我正在尝试创建一个 Prolog 谓词 iscontained/2:iscontained(List, Search) 它返回 true。 如果Search 在给定的 List 中列出,false. 如果不是。如果它是一个输入的变量,那么它只返回它等于列表中的每个元素。

例子:

?- iscontained([a, b, c], a).

true.

?- iscontained([a, b, c], d).

false.

?- iscontained([a, b, c], A).

A = a;
A = b;
A = c;
false.

我需要朝着正确的方向插入,而不是寻求帮助,除非你知道一个快速的方法。感谢任何帮助,谢谢。

最佳答案

请注意,经常提出的 member/2 谓词承认根本不是列表的解决方案:

?- member(e,[e|nonlist]).   true.

在许多情况下这不是一个大问题,但仍然应该提及。

只接受列表的自然对称定义使用 DCG:

... --> [] | [_], ... .iscontained(Es, E) :-   phrase((...,[E],...), Es).

... 是一个非终结符,表示任意序列。

虽然这对于这个小例子来说完全是矫枉过正,但它为您提供了一个模板来实现更有趣的模式。喜欢

iscontainedtwice(Es, E) :-   phrase((...,[E],...,[E],...), Es).

关于Prolog函数是否包含?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9814911/

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