2011-09-07 17 views
5

学校の割り当ての問題を解決する際に、私が1つのアイテムのように1つのアイテムリスト(1つのアイテムのスタック)を扱っていた間違いを発見しました。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' expected, found `0.66' 

同様の挙動は=を使用して行われます:=/2の代わりに/ 2である私は、私は奇妙な何かに気づいたが、さらにテストでは、私の問題を解決しました。だから何らかの理由で、単一の項目リストは単一の項目と同じだとみなされますが、負でない整数についてのみです。

他の何よりも好奇心...これはなぜ誰が知っていますか?

ありがとうございます!

答えて

4
SWI-Prolog

(そしておそらく他の人)、これはis/2=:=/2による評価のための表現のbackward compatibility implementationに関連している:

.(+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. 

文字コードは非負整数であるように、これはなぜ動作します説明できますそのような数字だけで浮動小数点数や負数は使用できません。

+0

ありがとうございます!それは答えと思われます。「97は」。本当です。しかし、たぶん私はばかだと思うかもしれませんが、そのマニュアルページに何が記述されているのかを本当に理解することはできません。述語(min、max、absなど)は私のために存在していないように見えますが、なぜすべての引数に+記号が付いているのかわかりません。そして、私はなぜこのQに関係する述語が2つの議論を持つドットに過ぎないのか分かりません。私はそのようなものを使っていません。 – The111

+2

そのページはSWI-Prologに関するページです。おそらくあなたの実装はmin、maxなどをサポートしていませんか?いくつかの引数の前には '+ 'があり、これはモードを示しています。つまり、' + 'は束縛された(そして可変ではない)ことを意味します。最後に、リスト構文['a、b]'は '。/ 2'リストコンストラクタ述語の省略形です(実際は'。(a、。(b、[]))))。あなたの場合、 '[1]'のような単一の整数のリストは '。(1、[])'の省略形です。 – sharky

+0

ええ、大きな説明...私は今それを得たと思います。再度、感謝します。 – The111

関連する問題