2017-03-07 10 views
1

明らかに、=は、trueという用語を(意味を評価することなく)not(not(true))という用語で統一しようとするため、偽である必要があります。Prolog:なぜ本当ですか==(not(true)) - > false?

しかし、私は==が評価されたものを実際に比較していると思っていました。したがって、true == not(not(true))true == trueと評価する必要があります。算術演算子の場合と同様に4 =:= 2 + 24 =:= 4と評価され、trueを返します。

...しかし、これは私がSWI-Prologで得るものです:私は間違って何を取得しています

?- true == not(not(true)). 
false. 

+2

ある場所で 'not(not(false))'を使用し、他の場所で 'not(not(true)) 'を使用しました。それは慎重だったのか? – user2357112

+0

いいえ、タイプミスです。 Sry。修正しました。 – daniel451

答えて

1

(==)/2は評価されたものと比較します。それはその議論を評価しない。引数がすでに一致する用語にインスタンス化されている場合にのみ成功します。 Prologで

not(not(true))自体が引数を持たない用語true/0からなる1つの引数の用語not/1され、単一の引数、not(true)を持つ用語not/1である化合物の用語です。それは価値がありません。特定の状況を除いて「実行」さえしません。 Prologでは、引数が失敗すると述語not/1が成功し、引数が成功すると失敗します。これはまたは機能結果ではありませんが、動作です。これは、それが次のような状況に表示されていることを想定している。

not(not(true)), 
write('This will be written out because not(not(true)) succeeded'), nl. 

プロローグにおける発現true == not(not(true))はに等しい化合物の用語であり、この文脈において

'=='(true, not(not(true))) 

not(not(true))は評価されません。 Prologは最初に(==)/2同値演算子を実行します。引数は同じ項にインスタンス化されると成功します。 Prologの用語truenot(not(true))は同じ(または同等のもの)ですか?いいえそうではありません。 1つは引数のない簡単な用語です(true/0)。もう一つは複合用語である:1つの引数を持つ用語そのものが1つの引数を持つ用語。したがって、(==)/2はここで失敗します。

(=:=)/2は全く異なっています。算術式の結果を比較する演算子です。引数は評価可能な算術式でなければならず、同じ結果に評価すると(=:=)/2は成功し、そうでない場合は失敗します。

+0

むしろ '(==)/ 2' – false

+0

@false確かに、私は少し怠け者でした。 – lurker

+1

まだ怠惰で、丸い角かっこを意味します。それ以外の場合は、トークン '== /' – false

関連する問題