問題タブ [meta-predicate]
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.
list - プロローグ: リストのフィルタリング?
私は現在、Prolog で非常に短いプロジェクトに取り組んでおり、作成した「フィルター」をリストに適用しようとして行き詰まりました。フィルターの準備はできていますが、適用できません。私が説明した方が良いでしょう:
...特定の条件が満たされた場合に「true」を出力します。
...フィルタ出力をfalseにする 2 番目の引数からのすべての要素を含むリストを出力します。(したがって、filter(A, X) が true の場合、出力は [Y, Z] になります)。
「フィルター」関数の準備ができましたが、最初の引数を適用したときにフィルターが true を返すすべての要素を除外して、2 番目の例に示すようにリストに適用する必要があります。
したがって、フィルターが単純な A == B の場合、関数は A [A,B,A,C,D,A] を受け取り、[B,C,D] を出力することになっています。明らかに、フィルターが適用されます。
関数の基本構造に問題があるので、誰かがこのような関数の基本的な概要を提供できれば、非常に役に立ちます。私は自分の状況を可能な限り単純化したので、あなたが提供できるものは何でも取り、私のニーズに合わせて変更することができます.
前もって感謝します!
prolog - Prologで逆引き?(X について真であるすべてを見つけるにはどうすればよいでしょうか?)
したがって、Prolog データベースに次のものがあるとします。
すべての人をリストしたい場合は、次のように入力できることは明らかです。
しかし、ジョンについて真実であるすべてのことを見つけたい場合はどうすればよいでしょうか? できない:
しかし、私が望む効果は、「ジョン」を入れて「人」と「幸せ」を取り戻すことができることです.
自分の情報を保存する別の方法があることは明らかです。
そして、私はできる:
しかし、ここで表現力を失います。私は本当に次のようなことができるようになりたいです:
何か案は?
ありがとう!
prolog - プロローグ GNU - Univ オペレーター? その説明
だから大学のオペレーター。よくわかりません。
たとえば、次のようになります。
これは何をしているのですか?これは、別の述語が真かどうかを確認します。「..」の意味がわかりません。
univ 演算子なしでこれをどのように書き換えますか?
prolog - プロローグは、カスタム ゴールが失敗するすべての要素のリストをフィルター処理します
目標が失敗したすべての要素をfilter(List, PredName, Result)
フィルタリングし、その後リストを返す述語を作成しようとしています。述語は、プロシージャを呼び出すときに定義する必要があり、たとえば次のようになります。List
PredName
Result
PredName/1
filter/3
クエリは次のように作成できます。
prolog - リスト要素に述語を適用するプロローグマップ手順
の要素にmap(List, PredName, Result)
述語を適用し、結果をリストに返すPrologプロシージャをどのように記述しますか?PredName(Arg, Res)
List
Result
例えば:
prolog - ルールの順序に依存する
同じ長さの2つのリスト間のハミング距離を計算するために、foldl(hamm, A, B, 0, R).
次の定義を使用しますhamm/4
。
最初のルールのカットは、不要なバックトラックを防ぎます。ただし、2番目のルールは別の方法で記述されている可能性があります。
また、AとBの両方がグラウンドされているクエリhamm2/4
と一緒に、またはクエリに対しても正しいでしょう。foldl/5
それで、一方を他方よりも好む本当に正当な理由がありますか?または、ルールをこの順序で維持したり、切り替えたりする理由はありますか?
私はクエリが
は偽ですが
本当ですが、どちらがより理にかなっているのかを完全に判断することはできません。。。
prolog - HiLog 用語は、現代の Prolog でもまだ有用ですか?
Hilog ターム (つまり、ファンクターとして任意のタームを持つ化合物) は、XSB Prolog (またはその他の Prolog) の強力な機能とみなされますか? 現在、この機能を使用している XSB プロジェクトは多数ありますか? たとえば、どれですか?
私が理解している限りでは、ISO 組み込みの call/N を使用して高次のプログラミングが同様に可能であるため、質問します。
具体的には、XSB が単に歴史的な理由で Hilog 用語を使用しているのか、それとも現在の ISO 標準と比較して Hilog 用語にかなりの利点があるのかを理解したいと思います。
prolog - 最大リスト GNU プロローグ
GNU プロローグでは、制約付き:
N = 5 (たとえば) の場合、次のようなリストがあります。
[3*(1-_#0(0..1)),2*(1-_#18(0..1)),1*(1-_#36(0..1)),4*(1-_#54(0..1)),2*(1-_#72(0..1))]
私は有限ドメイン制約環境に取り組んでおり、この max_list(MaxFilter, M0) を試しました。
そして、このエラーが発生しました(現時点では変数に値がないため)キャッチされていない例外: error(type_error(evaluable,_#4195373(0..1)),(=<)/2)
Eclipse では eval を使用し、SWI ではこの述語を使用しました
しかし、GNU で foldl に相当するものは見つかりませんでした。
私は何をすべきか?何か案は?立ち往生していて、何日もインターネット全体を検索しています...
私が実際に望んでいるのは、ソリューションのリストのラベル付けが発生したときに、このリストの最大値を見つけることです (メインの述語の最後で)。これが発生すると、最大値を見つけようとしているリストの変数に値が設定されます (これらは同じ変数です。上記の例では、Sol=[_#0(0..1), _# があります) 18(0..1), ...])。しかし、最大値を見つけようとするとエラーがスローされるため、コードがこのポイントに到達することはありません。
prolog - リスト上のペアワイズ関係
次の高次述語は、リストの要素のすべてのペアが特定の関係に対して true である場合に成功します。この関係に共通の、またはより良い、より意図を明らかにする名前はありますか?
この名前を付けた当初の動機は、clpfdall_different/1
では、要素がペアごとに異なる場合に、真であると記述される制約がしばしばあるということでした。実際には、要素がすべて異なると言うほうが好ましいのですが、私は (Prolog プログラマーの仲間によって) ペアワイズ ディファレンスを使用するように頻繁に修正されています。実際、この制約は として最も自然に表現できるようになりましpairwise(#\=, Zs)
た。
@aBathologist が観察したように、ペアワイズは適切な言葉ではありませRel
ん。
また、失敗する可能性がありますが、それでも成功する可能性がRel
あるため、関係は完全な関係ではありません。call(Rel, X, X)
pairwise(Rel, Xs)
私も大騒ぎしました(a->a->Bool)->[a]->Bool
。しかし、Hayooはそれを見つけましたpairwise
。
MOと数学を見た: