gpt4 book ai didi

prolog - 几何类比,为什么我没有得到更多的答案?

转载 作者:行者123 更新时间:2023-12-03 21:39:55 25 4
gpt4 key购买 nike

这是我的序言代码:

figure(1, middle(circle, circle)).
figure(2, top_left(circle, circle)).
figure(3, bottom_right(circle, circle)).
figure(4, middle(square, square)).
figure(5, top_left(square, square)).
figure(6, top_right(square, square)).
figure(7, bottom_right(square, square)).
figure(8, bottom_left(square, square)).

relate(F1, F2, Relation) :-
( figure(F1, middle(X, Y)), figure(F2, middle(Y, X)), F1 \== F2 ->
Relation = invert
; figure(F1, middle(X, X)), figure(F2, middle(Y, Y)), F1 \== F2 ->
Relation = same_in_out
; figure(F1, top_left(X, X)), figure(F2, bottom_right(Y, Y)), F1 \== F2 ->
Relation = opposite
; figure(F1, top_right(X, X)), figure(F2, bottom_left(Y, Y)), F1 \== F2 ->
Relation = opposite
; relate(F2, F1, Relation)
).

analogy((F1, F2), (F3, X)) :-
relate(F1, F2, Relation), relate(F3, X, Relation).

代表这一套 enter image description here

这是一个简单的执行:
| ?- relate(2, X, Y).

X = 3
Y = opposite;

no
| ?- relate(2, 7, X).

X = opposite;

no

我的问题是,当我关联 (2, X, Y) 时,为什么我没有 X = 7, Y = 对立?

谢谢你。

最佳答案

因为您使用 if-then-else,而 Prolog 不会从这样的构造中回溯:

?- (member(X, [1,2,3]) -> Y = hello ; Y = goodbye).
X = 1,
Y = hello.

?-

If-then-else 真正用于高效的确定性计算。如果您想要非确定性/回溯,您应该使用普通的连词、析取和事实列表来重写您的谓词:
relate(F1, F2, Relation) :-
figure(F1, Fig1),
figure(F2, Fig2),
relate_(Fig1, Fig2, Relation),
F1 \== F2.

relate_(middle(X, Y), middle(Y, X), invert).
% etc.

关于prolog - 几何类比,为什么我没有得到更多的答案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7869709/

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