【发布时间】:2015-12-13 02:24:20
【问题描述】:
我是一个写作 Prolog 谓词,它将笛卡尔坐标系中的某个点 (myPosition(2,2)) 与邻域中的某个其他点进行比较。因此,它应该显示我们应该选择从myPosition(2,2) 到该点的方向(北、东、南、西)。这是我的.pl 文件的代码:
myPosition(2,2).
turn_to_east(X+1,Y) :-
myPosition(X,Y),
write('East.').
turn_to_west(X-1,Y) :-
myPosition(X,Y),
write('West.').
turn_to_north(X,Y+1) :-
myPosition(X,Y),
write('North.').
turn_to_south(X,Y-1) :-
myPosition(X,Y),
write('South.').
turn_to_the_point(X,Y) :- turn_to_east(X,Y).
turn_to_the_point(X,Y) :- turn_to_west(X,Y).
turn_to_the_point(X,Y) :- turn_to_north(X,Y).
turn_to_the_point(X,Y) :- turn_to_south(X,Y).
然后,当我将文件上传到 SWI-Prolog 并写入时:
turn_to_the_point(1,2).
我明白了:
false.
为什么我不能得到“西部”的答案。还是其他?
【问题讨论】:
-
Prolog 不像其他语言。它没有返回值的函数。它具有成功、失败或不终止(坏)的谓词。而且它不做 in-line 表达式评估。所以
turn_to_west(X-1,Y)例如不会将X递减 1。 -
首先是一些术语:在Prolog中,没有函数,这些是谓词。