Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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
List Prolog赋值"\r";当使用13时_List_Prolog - Fatal编程技术网

List Prolog赋值"\r";当使用13时

List Prolog赋值"\r";当使用13时,list,prolog,List,Prolog,上周开始学习prolog,在这个特殊情况下,变量是如何分配的,我遇到了麻烦,因为它是一个列表,列表中包含一个元素 ?- X = [[13]]. X = ["\r"] 为什么prolog分配[“\r”]?如何才能分配实际值?这正是“实际值”。它只是在顶层表现得不同而已 在大多数序言中,小整数列表和字符代码列表是相同的。换句话说,这两个,[13]和“\r”,无法区分。因此,当您将13放入一个列表中时,您的特定Prolog认为您的目的是创建一个(ASCII)代码的列表,并且由于13是回车的值,因此它

上周开始学习prolog,在这个特殊情况下,变量是如何分配的,我遇到了麻烦,因为它是一个列表,列表中包含一个元素

?- X = [[13]].
X = ["\r"]
为什么prolog分配[“\r”]?如何才能分配实际值?

这正是“实际值”。它只是在顶层表现得不同而已

在大多数序言中,小整数列表和字符代码列表是相同的。换句话说,这两个,
[13]
“\r”
,无法区分。因此,当您将
13
放入一个列表中时,您的特定Prolog认为您的目的是创建一个(ASCII)代码的列表,并且由于13是回车的值,因此它向您显示了这一点。(这里,用双引号括起来的字符串只是表示小整数列表的另一种方式)。但这实际上取决于实施情况。以下是我的Prolog(SWI Prolog v7)告诉我的:

?- X = [[13]].
X = [[13]].
为了让您更加困惑,您可以用另一种方式编写上述内容:作为
0'
符号中的字符代码列表:

?- X = [0'\r], Y = [0'\xd].
X = Y, Y = [13].
(不确定您将看到什么:有关这些详细信息,请参阅您的实现文档。)


0'
表示法是一种直接获取字符数值的方法:
0'a
97
相同。因此,上面的
X
是回车的数值,它是13,十六进制的
0xD

SWI prolog中的双引号表示SWI prolog中的字符代码列表。因此,
“\r”
等同于
[13]
。正如
“abc”
等同于
[97,98,99]
。此外,Prolog不“赋值”变量。它“统一”了他们。这是一个重要的区别。您的查询可以写为
?-[[13]]=X.
同样好,但如果您认为这是赋值,那么它似乎是错误的。但是
[[13]=[“\r”]
在SWI Prolog中产生false,所以这两个东西在所有的Prolog中都不一样。@DavidTonhofer它们在“传统”模式下是一样的:
$swipl-q——传统?-[[13]=[“\r”]正确。