http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/2_1.html
所以在那个教程中:
conflict(Coloring) :-
adjacent(X,Y),
color(X,Color,Coloring),
color(Y,Color,Coloring).
我是否正确理解了这一点,Color是一个变量,在第一次调用color
后设置为一个值,然后在第二次调用color
时使用该值?
答案 0 :(得分:3)
Prolog中的变量:
所有变量和参数都在声明它们的谓词(也就是第一次使用)的范围内。当然,除了变量可以作为参数(基本上是“通过引用”)传递给另一个谓词。
Prolog变量只有“变量”才能与其他东西绑定(统一)。在那一点上,它们不再是变数,而是与它们统一的那个变成一个。因此,使用“统一”这一术语:统一就是成为一体。
当然,回溯会撤消可能发生的任何统一,将事情按原样返回现状。
特殊变量_
是“匿名变量”。即使在谓词的同一子句中,每次使用都是独立的。例如,鉴于事实
letter(a).
letter(b).
letter(c).
digit(1).
digit(2).
digit(3).
谓词:
foo :- letter(A),number(A).
失败,而
foo :- letter(_),number(_).
将成功(9次,带回溯)。
答案 1 :(得分:1)
将它变为变量,但我们不能说它是否会从第一次或第二次调用color / 3获得一个值(在Prolog中称为绑定)。一切都取决于颜色/ 3的定义。但是考虑到这段代码,很可能你的假设没问题。