私はPrologを勉強していますが、なぜ?- [] = _.
がSWI-Prologでtrueを返すのか理解できません。 []
は空のリストを意味し、_
は空ではないことを意味します。
誰かが上記のロジックを説明できますか?なぜ[] = _なのですか? Prologでは本当ですか?
3
A
答えて
9
_
は論理変数で、X
またはアンダースコアまたは大文字で始まるものと同じです。自由変数(つまり、何らかの言葉にまだ縛られていない変数)は何でも統合することができます。 [] = X
のような目標では、 "X
を[]
と統合する"というメッセージが表示され、成功した場合はX
を使用するたびに[]
という用語が使用されます。変数として_
で
これは_
が匿名変数であることを除いて、X
の場合と同じである:それは問題では、と_
の異なる出現は違う変数を参照していない、その名前を再利用することはできません。だから_
は目標[] = _
に遭遇する前に縛られることはありません。したがって、この統一は成功します。そのため、答えはtrue
です。
_
それ自身では「空ではない」という意味ではありません。しかし、あなたはプレースホルダーとしての使用によって混乱するかもしれません:L = [_,_,_]
は、L
が3つの要素のリストであることを意味します。この意味で_
は「ここに何かがある」という意味です。しかし、の中には、という意味のリストが含まれていなければなりません。
関連する問題
- 1. Prolog:なぜ本当ですか==(not(true)) - > false?
- 2. [] + {} === {} + []はなぜ本当ですか?
- 3. なぜtypeidは本当ですか?
- 4. cocos2dで60fpsしか本当に滑らかなのはなぜですか?
- 5. Zend Framework 1.11は本当に遅いです。なぜですか?
- 6. 本当のステートメントはなぜ偽ですか?
- 7. セッションは本当にフラッシュされません、なぜですか?
- 8. マルチスレッドでマルチプロセッシングを利用できないのは本当ですか?もしそうなら、なぜですか?
- 9. なぜ入力checkValidityのスペースが本当ですか?
- 10. なぜ私のIf-Elseは本当に評価されないのですか?
- 11. この単純な例でPrologがクラッシュするのはなぜですか?
- 12. なぜNHibernate.Cache.HashtableCacheProviderは本番用ではないのですか?
- 13. なぜこの置換はPrologで保持されますか?
- 14. function(){}は本当ですか?
- 15. Prolog - なぜメンバー/ 2はここで働いていないのですか?
- 16. 断片化から断片化までのコミュニケーション - インターフェイスが本当に必要なのはなぜですか?
- 17. なぜp = \ = 'p'はSWI-prologでエラーを返しますか?
- 18. 値をnullと比較します。これはなぜ本当ですか?
- 19. -0 === 0が本当に評価されるのはなぜですか?
- 20. この条件は本当ですか?
- 21. Prologがこれらのビルトインを認識しないのはなぜですか?
- 22. Prolog乗算シンボル*がなぜ未定義のプロシージャですか?
- 23. 自分のbutton.enabledが自分のコードで本当に表示されないのはなぜですか?
- 24. 完全なバイナリツリーの本当の意味は何ですか?
- 25. SyncRootオブジェクトは本当にスレッドセーフですか?
- 26. このProlog Queryで長さから値を取得できないのはなぜですか?
- 27. /abbb /が一致しないのは本当ですか?/ ab + c?/
- 28. Androidのアクティビティは本当に視覚的な表現ですか
- 29. これは本当にシンプルなCSSはなぜ機能しないのですか?
- 30. オブジェクト(本当にオブジェクト[])を文字列[]に変換できないのはなぜですか?
任意の匿名の空ではないリストは、匿名の頭部と匿名の尾を持つリストである '[_ | _]'で表されます。 '_'自体は何かと一体化しています。 '1 = _.'、' a(b、c)= _.'、 'x = _.'もすべて真です。 – lurker