prolog - 变量及其在序言中的设置和使用方式

标签 prolog

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 时使用该值?

最佳答案

Prolog 中的变量:

  1. 所有变量和参数在声明它们的谓词(即首次使用)的范围内都是局部的。当然,变量可以作为参数(本质上是“通过引用”)传递给另一个谓词除外。

  2. Prolog 变量在与其他东西绑定(bind)(统一)之前只是“变量”。在那一点上,它们不再是可变的,并与它们所统一的东西合而为一。因此使用术语“统一”:统一就是成为一个。

  3. 当然,回溯会取消任何可能发生的统一,将事情恢复到原状

  4. 特殊变量_ 是“匿名变量”。每次使用,即使在谓词的同一个子句中也是独立的。例如,给定事实

    letter(a).
    letter(b).
    letter(c).
    
    digit(1).
    digit(2).
    digit(3).
    

谓词:

foo :- letter(A),number(A).

失败,而

foo :- letter(_),number(_).

将成功(9 次,有回溯)。

关于prolog - 变量及其在序言中的设置和使用方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9026035/

相关文章:

http - swi 序言 8.0.2 : gziped http

prolog 深度优先迭代深化

Prolog: 未捕获异常: error(existence_error(procedure,s/3),top_level/0)

list - Prolog - 如何生成特定长度的列表?

prolog - 单例变量错误

list - 列表的序言长度

安卓和序言

prolog - 使序言谓语具有确定性

list - 是否可以声明一个升序列表?

prolog - 通过示例(Prolog 语言)理解 Cut(!) 运算符的问题