Prolog:获取变量的所有可能值
Prolog: get all possible values of a variable
我正在关注 Prolog Tutorial 2.1。
计划
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 .
我怎样才能 get/print 一个变量可能值的列表?
在 swipl 中,library(apply) 默认是自动加载的,所以你可以写
main:-
forall(adjacent(1, R), (write(R),nl)).
注意:Action 是一个连词,只是为了说明所需的正确语法。出于任何实际目的,main :- forall(adjacent(1, R), writeln(R)).
可能会更好。
你需要一个故障循环:
adjacent(1, 2).
adjacent(1, 3).
adjacent(1, 4).
main :-
adjacent(1, R),
write(R), nl,
fail.
main.
这是 Prolog 中的基本编程技术。 fail/0 将强制回溯,因此探索下一个 adjacent/2 解决方案(依此类推)。 main/0 的第二个子句防止循环本身失败。
在 Prolog 打印出 R = 2;
后,您可以按“r”、“n”、[TAB] 或 [SPACE] 来显示下一个结果。
我不知道它如何与 write(R).
一起工作,但这不在教程的代码中,所以我认为这应该是诀窍
我正在关注 Prolog Tutorial 2.1。
计划
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 .
我怎样才能 get/print 一个变量可能值的列表?
在 swipl 中,library(apply) 默认是自动加载的,所以你可以写
main:- forall(adjacent(1, R), (write(R),nl)).
注意:Action 是一个连词,只是为了说明所需的正确语法。出于任何实际目的,main :- forall(adjacent(1, R), writeln(R)).
可能会更好。
你需要一个故障循环:
adjacent(1, 2).
adjacent(1, 3).
adjacent(1, 4).
main :-
adjacent(1, R),
write(R), nl,
fail.
main.
这是 Prolog 中的基本编程技术。 fail/0 将强制回溯,因此探索下一个 adjacent/2 解决方案(依此类推)。 main/0 的第二个子句防止循环本身失败。
在 Prolog 打印出 R = 2;
后,您可以按“r”、“n”、[TAB] 或 [SPACE] 来显示下一个结果。
我不知道它如何与 write(R).
一起工作,但这不在教程的代码中,所以我认为这应该是诀窍