問題タブ [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.

0 投票する
1 に答える
56 参照

prolog - setof/3 内の setof/3 が機能していませんが、なぜですか?

に触発された

swi-prologで異なる事実の相互要素を見つける

「Prolog での RDBMS 操作」を試してみたかった (実際、これは多かれ少なかれ Datalog です)

問題文

「映画に出演している俳優」のデータベースが与えられた場合:

与えられた映画のセットから、そのセットのすべての映画に出演した俳優を見つけます。

私は最初は醜い解決策を持っていましたが、その後...

素敵な解決策

問題を明確にします。

セットは重複のないリストで表され、場合によっては順序付けられます。

  1. 映画のセットが与えられた場合 MovIn
  2. ...アクターのセットを見つける ActOut
  3. ... ... そのような: のすべての俳優ActOutが (少なくとも) すべての映画に出演MovIn
  4. ... ... 再定式化: のアクターの映画のセット は のスーパーセットです。MovAxAxActOutMovIn

setof/3は正しいトップレベル述語のようです。ポイント 1 と 2のAnsatzは次のとおりです。

に登場する映画MovAxセットである場合Ax、使用できます

を使いましょうsubset/2

ポイント4は、私たちに次のように書かせるようです:

......を開発する

これはもうありそうです!

λ 式はあるのに、キーボードや構文に λ がないときの感触。

終わり!

述語にまとめる:

残念ながら、上記は機能しません。

どうやらすべてを別の にラップする必要があるようですsetof/3が、なぜですか??

完了、2 つ取ります

以下機能します:

テスト

テストは、いくつかの目標を実行しているだけです。

映画の空のセットについては、すべての俳優を取得することに注意してください。これは間違いなく正しいです。すべての俳優が空のセットのすべての映画に出演します。

質問

私は何を逃しましたか

0 投票する
1 に答える
153 参照

prolog - ^ マーク付きの setof/3 を理解するプロローグ

誰かがこれが何をしているのか説明してもらえますか?

setof; のドキュメントを読みました。私の理解では、3 番目の引数は事実と統一されます。

ただし、上記のコード スニペットの意味がわかりません。

完全なスニペットは次のとおりです。

0 投票する
1 に答える
107 参照

prolog - プロローグ: 存在論的定量化

存在量化の使用法を理解しようとしています。私が今知っていることは、このテクニックがsetoffindall、 で使用されていることbagofです。さらに、チュートリアルを見つけました。Vars^Goalただし、 Prolog で (存在量の定量化) をいつ、どのように行うかはわかりません。

Lここに例を示します。私の目標は、お互いを知っているが別の会社で働いている 2 人の従業員を見つけ、その結果を次のようにバインドすることName1-Name2です。

私の最初の本能は、クエリを使用することです

クエリは答えを見つけましたが、正しい形式にレンダリングしません。正しいものは次のとおりです。

どうすれば理解でき(C1,C2)^(employee(N1,C1),employee(N2,C2),C1\=C2,knows(N1,N2))ますか?また、そのコンセプトは何ですか?ありがとう。

0 投票する
1 に答える
58 参照

prolog - PROLOG プログラムのルールとファクトをリストに結合するにはどうすればよいですか?

すべての Intel プロセッサのすべてのリリース日のリストを見つけようとしています。このように見えるはずです

[1993 年、1976 年、1974 年、1971 年]

現在、このようなエントリが 1 つのリストしか作成できません

setof(Y,released(pentium,Y),S1)それは私に[1993]を与えます。