Q
追加構文の理解
2
A
答えて
3
私たちが最初に孤立して句の単一の目標を考えてみましょう:
?- append([H|T], _, L).
これは何を意味するのでしょうか?純粋なPrologコードでは、関係についてもっと学ぶのに便利で便利な方法があります。をトップレベルに照会して、どのような解があるかを見てください。
試してみてください!
L
は常にから構成されています:
H
として例えば:私たちはappend/3
のこの呼び出しはその引数の間の関係を定義し、我々は以下のパターンを見ることがわかり、このから?- append([H|T], _, L). L = [H|_1282], T = [] ; L = [H, _1078|_1096], T = [_1078] ; L = [H, _1078, _1084|_1108], T = [_1078, _1084] ; L = [H, _1078, _1084, _1090|_1120], T = [_1078, _1084, _1090] ; etc.
第1の要素
- とそれに続くすべての要素が
T
- f接尾辞のついた
ことがappend([H|Ts], _, Ls)
の意味を正確に何ので、これは、思わぬされていません。すべてのでによって任意のリストを追っ[H|Ts]
リスト Ls
を構成しています。あなたの具体的な使用例で
は、L
ががをインスタンス化し、そのサフィックスは任意の長さにすることはできませんことを意味していることは明らかです。
:
?- append([H|T], _, [a,b,c]). H = a, T = [] ; H = a, T = [b] ; H = a, T = [b, c] ; false.
だから、我々は全体の句の意味を参照してくださいには、(リストは接尾辞 の変数名中で示されているように、私は、変数の名前を変更しました)
powerset(Ls, [H|Ts]):- append([H|Ts], _, Ls).
Ls
場合は、要素Ts
続いて、その最初の要素H
として含むリストであり、その後にはがあります。、、、リスト[H|Ts]
は、L
のpowersetのメンバーです。非公式
:
リストのすべての空でない接頭辞が冪のメンバーです。
そして、それはこのスレッドに表示されるこのことから我々はまた、powerset/2
の明白な省略を参照してください条項のいずれも空 は冪のメンバーとしてを設定していない、さらに不穏、それらのどれも得ませんは有効なセットとして空のセットを受け入れ、そう間違って次はを失敗:
?- powerset([], _). false. % empty set is not a set?
は練習:正しいpowerset/2
となり、powersetのすべての要素に対して実際に成功するようになります。
関連する問題
- 1. Angularの構文の理解
- 2. COALESCEの構文の理解
- 3. 構文エラーリストの理解
- 4. 理解メソッドシグネチャの構文
- 5. 理解のNSLog構文
- 6. スウィフトセットの理解構文
- 7. SQL構文の理解
- 8. C++ Struct構文の理解
- 9. トラブル理解re.findallパターン構文
- 10. AVRプログラミング用のSubi構文の理解
- 11. 関数ポインタのC構文の理解
- 12. Pythonの構文/表記の理解
- 13. ExtJSフレームワークの構文の理解
- 14. python .T.dot()numpy構文の理解
- 15. )(numpy.r_の構文を理解連結
- 16. SQL定義構文の理解
- 17. 理解歩哨-provider.iniファイルの構文
- 18. lex codeの構文を理解する
- 19. 理解csv PythonのDictWriter構文
- 20. ノードJS構文エラーの理解
- 21. スプリット、理解、大文字とフルートを追加
- 22. cat <<を理解する!構文
- 23. 問題を理解するUriMatcher構文
- 24. 一覧理解無効な構文エラー
- 25. Android XML | pathData構文を理解する
- 26. ハイパーリンクの追加の最適化構文
- 27. 理解プロローグ「追加」再帰的定義
- 28. Lua関数の追加構文
- 29. MySQLの構文エラー...理由を理解できない
- 30. プロローグの構文解析木を論理文に戻す方法