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

How to change the order in which variables are printed in prolog?

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

 ?- 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 这总是正确的。

综上所述,我不相信你的导师会坚持非常精确的顺序。