Prolog 序言:单个项目与单个项目列表

Prolog 序言:单个项目与单个项目列表,prolog,Prolog,在为学校的一个较大作业进行故障排除时,我发现了一个错误,我将单个项目列表(一个包含一个项目的堆栈)视为单个项目。我解决了我的问题,但是在进一步的测试中,我发现了一些奇怪的事情: 48 ?- 1 is [1]. true. 49 ?- -1 is [-1]. ERROR: is/2: Type error: `character' expected, found `-1' 50 ?- 0.66 is [0.66]. ERROR: is/2: Type error: `character' ex

在为学校的一个较大作业进行故障排除时,我发现了一个错误,我将单个项目列表(一个包含一个项目的堆栈)视为单个项目。我解决了我的问题,但是在进一步的测试中,我发现了一些奇怪的事情:

48 ?- 1 is [1].
true.

49 ?- -1 is [-1].
ERROR: is/2: Type error: `character' expected, found `-1'

50 ?- 0.66 is [0.66].
ERROR: is/2: Type error: `character' expected, found `0.66'
使用=:=/2而不是is/2也会发生类似的行为。因此,无论出于何种原因,单个项目列表被视为与单个项目相同,但仅适用于非负整数

好奇心比什么都重要。。。有人知道这是为什么吗

谢谢

在(可能还有其他)中,这与由
is/2
=:=/2
计算的一系列表达式有关:

.(+Int,[])

A list of one element evaluates to the element. This implies "a" evaluates to 
the character code of the letter `a' (97). This option is available for 
compatibility only. It will not work if `style_check(+string)' is active as "a"
will then be transformed into a string object. The recommended way to specify the
character code of the letter `a' is 0'a.

由于字符代码是非负整数,这可以解释为什么您看到的行为只适用于此类数字,而不适用于浮点和负数

谢谢!这似乎是答案,因为“97是[a]”是正确的。然而,也许我是个白痴,但我不能真正理解手册页面上描述的内容。列出的谓词(min、max、abs等)对我来说似乎不存在,我也不明白为什么所有的参数前面都有+符号。我不明白为什么这个Q的谓词只是一个有两个参数的点,我没有使用类似的东西;也许您的实现不支持min、max等。?一些参数前面有
+
,因为这表示模式,即
+
表示绑定(而不是变量)。最后,列表语法
[a,b]
/2
列表构造函数谓词的缩写(实际上
(a,.(b,[])
)。在您的例子中,像
[1]
这样的单个整数列表是
(1,[])
的缩写。好的,很好的解释。。。我想我现在明白了。再次感谢。