問題タブ [prolog-setof]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
prolog - setof/3 内の setof/3 が機能していませんが、なぜですか?
に触発された
「Prolog での RDBMS 操作」を試してみたかった (実際、これは多かれ少なかれ Datalog です)
問題文
「映画に出演している俳優」のデータベースが与えられた場合:
与えられた映画のセットから、そのセットのすべての映画に出演した俳優を見つけます。
私は最初は醜い解決策を持っていましたが、その後...
素敵な解決策
問題を明確にします。
セットは重複のないリストで表され、場合によっては順序付けられます。
- 映画のセットが与えられた場合
MovIn
- ...アクターのセットを見つける
ActOut
- ... ... そのような: のすべての俳優
ActOut
が (少なくとも) すべての映画に出演MovIn
- ... ... 再定式化: のアクターの映画のセット は のスーパーセットです。
MovAx
Ax
ActOut
MovIn
setof/3は正しいトップレベル述語のようです。ポイント 1 と 2のAnsatzは次のとおりです。
に登場する映画MovAx
のセットである場合Ax
、使用できます
- ライブラリ(リスト)の サブセット/2または
- ord_subset/2 of library(ordset) ... すべてが ordset であることを確認できる場合。
を使いましょうsubset/2
。
ポイント4は、私たちに次のように書かせるようです:
...
...を開発する
これはもうありそうです!
λ 式はあるのに、キーボードや構文に λ がないときの感触。
終わり!
述語にまとめる:
残念ながら、上記は機能しません。
どうやらすべてを別の にラップする必要があるようですsetof/3
が、なぜですか??
完了、2 つ取ります
以下は機能します:
テスト
テストは、いくつかの目標を実行しているだけです。
映画の空のセットについては、すべての俳優を取得することに注意してください。これは間違いなく正しいです。すべての俳優が空のセットのすべての映画に出演します。
質問
私は何を逃しましたか
prolog - ^ マーク付きの setof/3 を理解するプロローグ
誰かがこれが何をしているのか説明してもらえますか?
setof; のドキュメントを読みました。私の理解では、3 番目の引数は事実と統一されます。
ただし、上記のコード スニペットの意味がわかりません。
完全なスニペットは次のとおりです。
prolog - プロローグ: 存在論的定量化
存在量化の使用法を理解しようとしています。私が今知っていることは、このテクニックがsetof
、findall
、 で使用されていることbagof
です。さらに、チュートリアルを見つけました。Vars^Goal
ただし、 Prolog で (存在量の定量化) をいつ、どのように行うかはわかりません。
L
ここに例を示します。私の目標は、お互いを知っているが別の会社で働いている 2 人の従業員を見つけ、その結果を次のようにバインドすることName1-Name2
です。
私の最初の本能は、クエリを使用することです
クエリは答えを見つけましたが、正しい形式にレンダリングしません。正しいものは次のとおりです。
どうすれば理解でき(C1,C2)^(employee(N1,C1),employee(N2,C2),C1\=C2,knows(N1,N2))
ますか?また、そのコンセプトは何ですか?ありがとう。
prolog - PROLOG プログラムのルールとファクトをリストに結合するにはどうすればよいですか?
すべての Intel プロセッサのすべてのリリース日のリストを見つけようとしています。このように見えるはずです
[1993 年、1976 年、1974 年、1971 年]
現在、このようなエントリが 1 つのリストしか作成できません
setof(Y,released(pentium,Y),S1)
それは私に[1993]を与えます。