gpt4 book ai didi

prolog - 如何更改 prolog 中变量打印的顺序?

转载 作者:行者123 更新时间:2023-12-02 05:14:00 24 4
gpt4 key购买 nike

这是一个家庭作业问题,但我只需要回答一个简单的问题。我应该打印出马从其位置跳上棋盘的所有可能方式。我得到了正确的数字,但似乎没有得到我想要的正确输出。例如:

 ?- knight(8,1,R,C)

应该将输出打印为:

C = 3
R = 7;
C = 2
R = 6;

但我得到的结果恰恰相反:

R = 7,
C = 3;
R = 6,
C = 2.

这是我的代码:

knight(C, R, C2, R2):-
C2 is C - 1,R2 is R + 2,
withinBoard(C2,R2)
; C2 is C + 1,R2 is R + 2,
withinBoard(C2,R2)
; C2 is C + 2, R2 is R + 1,
withinBoard(C2,R2)
; C2 is C + 2, R2 is R - 1,
withinBoard(C2,R2)
; C2 is C + 1, R2 is R - 2,
withinBoard(C2,R2)
; C2 is C - 1, R2 is R - 2,
withinBoard(C2,R2)
; C2 is C - 2, R2 is R - 1,
withinBoard(C2,R2)
; C2 is C - 2, R2 is R + 1,
withinBoard(C2,R2).

withinBoard(Col,Row):-
Row < 9, Row > 0, Col < 9, Col > 0.

最佳答案

?- C=C,knight(8,1,R,C).
C = 3, R = 7
; C = 2, R = 6.

这两个命令都很好,并且含义完全相同。

许多当前的 Prolog 系统按照 read_term(Query, [variable_names(VN_list)]). 确定的顺序打印变量。他们用它来阅读一个术语。因此,最左边出现的变量是第一个打印其答案替换的变量。

过去,有些系统订购了 VN_list通过变量的名称。这实际上确实有意义,因为标准未指定顺序。同时,此问题已在 Cor.3 中得到纠正。 。您的作业似乎可以追溯到 'C' @< 'R' 之前的时间。 。为了获得非常精确的顺序,您现在需要在前面添加一个人为的目标。我拿了C=C这始终是正确的。

尽管如此,我不相信你的导师会坚持非常精确的顺序。

关于prolog - 如何更改 prolog 中变量打印的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47344861/

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