gpt4 book ai didi

prolog - 序言查询中的单例变量

转载 作者:行者123 更新时间:2023-12-03 21:36:19 24 4
gpt4 key购买 nike

我是 Prolog 的新手,遇到了一个问题。当我针对下面的数据询问查询 ?-grandfather(daniel,george) 时,我得到了错误的答案。我不明白为什么我的查询不起作用。我还收到一条警告消息,指出[C,D] 是单例变量。此警告不再出现。同样,我不确定为什么。

mother(jules,mary).
mother(jules,martha).
mother(jules,andy).
mother(mary,annie).
mother(mary,george).
mother(martha,jesse).
mother(martha,june).
mother(june,camile).
father(daniel,mary).
father(daniel,martha).
father(daniel,andy).
father(adrian,annie).
father(adrian,george).
father(carlo,camile).

brothers(A,B):-father(C,A),father(C,B);mother(D,A),mother(D,B).

grandfather(E,W):-father(E,father(C,W));father(E,mother(D,W)).

最佳答案

您可以更简单地编写祖父查询:

grandfather(E,W):-father(E,A),father(A,W).
grandfather(E,W):-father(E,A),mother(A,W).

grandfather(E,W):-father(E,A),father(A,W);father(E,A),mother(A,W).

现在:

6 ?- grandfather(daniel,george).
true .
7 ?- grandfather(daniel,annie).
true .

在这里,我们要求 Prolog 找到 E 的孙子,其中:E 是 A 的父亲,A 是 W 的父亲/母亲。

或者更具体地说,检查丹尼尔是否有一个名叫乔治的孙子。 Prolog 检查:daniel 有一个女儿 mary,mary 有一个儿子 george。所以它会返回 true。如果您跟踪它,您会看到:

[trace] 3 ?- grandfather(daniel,george).
Call: (6) grandfather(daniel, george) ? creep
Call: (7) father(daniel, _G1931) ? creep
Exit: (7) father(daniel, mary) ? creep
Call: (7) father(mary, george) ? creep
Fail: (7) father(mary, george) ? creep
Redo: (7) father(daniel, _G1931) ? creep
Exit: (7) father(daniel, martha) ? creep
Call: (7) father(martha, george) ? creep
Fail: (7) father(martha, george) ? creep
Redo: (7) father(daniel, _G1931) ? creep
Exit: (7) father(daniel, andy) ? creep
Call: (7) father(andy, george) ? creep
Fail: (7) father(andy, george) ? creep
Redo: (6) grandfather(daniel, george) ? creep
Call: (7) father(daniel, _G1931) ? creep
Exit: (7) father(daniel, mary) ? creep
Call: (7) mother(mary, george) ? creep
Exit: (7) mother(mary, george) ? creep
Exit: (6) grandfather(daniel, george) ? creep
true .

[C,D] are singleton variables 表示子句中有一个或多个变量只出现一次。这不会影响程序,您仍然可以运行查询。

Singleton Variables on SWI Documentation

关于prolog - 序言查询中的单例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20601964/

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