gpt4 book ai didi

Prolog:说说Prolog如何响应查询并为它画一个搜索树?- member(2, [2, a, X])

转载 作者:行者123 更新时间:2023-12-01 15:03:25 27 4
gpt4 key购买 nike

Prolog 将如何回应以下询问?也为查询绘制一个搜索树。

?- member(2, [2, a, X]).

那么首先,这个查询是什么意思?

再举一个更明确的例子:

?-  member(vincent,[yolanda,trudy,vincent,jules]).

Prolog 将检查 vincent 是否在列表中。它一个一个地检查,所以它会首先比较 vincentyolanda。不匹配,现在递归规则也就是转到第二个子句。现在看起来像这样:

?-  member(vincent,[trudy,vincent,jules]).

vincenttrudy,不匹配。递归规则:

?-  member(vincent,[vincent,jules]).

vincentvincent,匹配!所以返回 true


回到我们的例子。 Prolog 将立即返回 true,因为 2 在列表中(即它的头部)。

但是搜索树会是什么样子呢?我真的不知道,我害怕他们会要求我在测试中画一个搜索树......

最佳答案

该查询意味着

For which X is 2 an element of the list [2, a, X]?

好吧,让我们看看 Prolog 如何回答这个问题:

?- member(2, [2, a, X]).
true
; X = 2.

我们得到的第一个答案true,这是空答案替换。这意味着 2 是 any X 列表的成员。真的随便!这是真的吗?

?- X = any, member(2, [2, a, X]).
X = any
; false. % that is no solution

任何也是如此!

现在回到最初的问题:第二个答案是一个简单的解决方案X = 2。所以 Prolog 告诉我们 2 也可能是这样一个元素。 las,我们已经知道了,因为我们知道这适用于任何术语。因此也是 2。因此,第二个答案是冗余

您可以使用 memberd/2 避免许多此类冗余相反!


至于搜索树,member/2 总是访问整个列表。一个接一个的解决方案。所以搜索树只取决于列表中元素的数量。

关于Prolog:说说Prolog如何响应查询并为它画一个搜索树?- member(2, [2, a, X]),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47382835/

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