Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Prolog -X是X+;1._Prolog - Fatal编程技术网

Prolog -X是X+;1.

Prolog -X是X+;1.,prolog,Prolog,在学习语言序言时,我发现了以下正确或错误的问题: 在Prolog?-X是X+1导致变量X增加1 一位老师说这是假的,但我不明白为什么。从现在起,X不是X+1?为什么它是假的?Prolog不能处理变量,比如可以更改值的元素。变量是当前没有值的元素,一旦它有值,它就不能更改该值(除了撤销统一的回溯) 如果X已经有一个值,将计算X+1,但不能将3与4统一: ?- X=3, X is X+1. false. 如果此时X不接地,则is谓词将失败: ?- X is X+1. ERROR: is/2: Ar

在学习语言序言时,我发现了以下正确或错误的问题:

在Prolog
?-X是X+1
导致变量
X
增加1

一位老师说这是假的,但我不明白为什么。从现在起,
X
不是
X+1
?为什么它是假的?

Prolog不能处理变量,比如可以更改值的元素。变量是当前没有值的元素,一旦它有值,它就不能更改该值(除了撤销统一的回溯)

如果
X
已经有一个值,将计算
X+1
,但不能将
3
4
统一:

?- X=3, X is X+1.
false.
如果此时
X
不接地,则
is
谓词将失败:

?- X is X+1.
ERROR: is/2: Arguments are not sufficiently instantiated

这个问题可能想说明命令式编程和逻辑编程之间的一个基本区别:在命令式编程中,变量可以被分配一个(新)值,在逻辑编程中,变量只能固定一次(回溯除外)。一旦完全接地,就不能以不同的方式接地。

在序言中
X是X+1
表示
X
X+1
具有相同的值,这显然是错误的。与其他语言不同,这不是新的
X
赋值。一旦确定
X
的值,除非通过回溯,否则无法更改该值。