Prolog 序言:获取变量的所有可能值
我跟在后面 节目Prolog 序言:获取变量的所有可能值,prolog,prolog-toplevel,Prolog,Prolog Toplevel,我跟在后面 节目 adjacent(1, 2). adjacent(1, 3). adjacent(1, 4). main:- adjacent(1, R), write(R). 打印2 但它假设根据教程打印可能值的列表: ?- adjacent(1,2). yes ?- adjacent(1,3). no ?- adjacent(1,R). R = 2 ; R = 3 ; R = 4 ; no 我在repl中再次尝试,但结果相同: ?- adjacent(
adjacent(1, 2).
adjacent(1, 3).
adjacent(1, 4).
main:-
adjacent(1, R),
write(R).
打印2
但它假设根据教程打印可能值的列表:
?- adjacent(1,2).
yes
?- adjacent(1,3).
no
?- adjacent(1,R).
R = 2 ;
R = 3 ;
R = 4 ;
no
我在repl中再次尝试,但结果相同:
?- adjacent(1, R).
R = 2 .
如何获取/打印变量的可能值列表?在swipl中,library()默认为自动加载,因此您可以编写
main:-
forall(adjacent(1, R), (write(R),nl)).
主要内容:-
(相邻(1,R),(写入(R),nl))。
注意:Action是一个conjuction,只是为了说明所需的正确语法。对于任何实际用途,
main:-forall(相邻(1,R),writeln(R))。
可能更好。您需要一个故障循环:
adjacent(1, 2).
adjacent(1, 3).
adjacent(1, 4).
main :-
adjacent(1, R),
write(R), nl,
fail.
main.
这是Prolog中的一种基本编程技术。失败/0将强制回溯,因此将探索下一个相邻的/2解决方案(依此类推)。main/0的第二个子句防止循环本身发生故障。在Prolog打印
R=2之后代码>,您可以按“r”、“n”、“TAB”或[SPACE]显示下一个结果。
我不知道写(R)是如何工作的。
但教程的代码中没有这一点,所以我认为这应该是你按下Return键的诀窍!按空格键获得下一个答案。相邻(1,3)。
应产生是
。有一件事你做得不太对,但它是不可见的。@false我在repl中做的,但是当以脚本(如swipl-q-f nexting.pl-t main
)运行程序时,如何获得这些值呢?