問題タブ [prolog-dif]
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 - 連続した重複を排除する
リスト要素の連続した重複を排除します。
これに対する私の解決策は次のとおりです。
そして、私は初心者であり、論理パラダイムの経験がないため、改善できる点と、なぜ私の解決策がうまくいかないのかを教えてください.
たとえば、X \= Y
私にはきれいに見えません。
list - プロローグ - 2 つのリストが 1 つを除いて同じ要素を持っているかどうかを確認する
私は2つの文字リストを扱っており、次のように、同じ位置に1つを除いて同じ要素があるかどうかを確認したい:
これは機能していますが、簡単な方法はありますか?
ありがとう。
list - プロローグ - 変数リストの長さを制限する方法
特定の基準を満たすすべてのリストを生成するのに問題があります。
query を発行するcities(L)
と、最大長が 2 で繰り返しのない都市のすべてのリストが生成されます。現在は、可能なすべてのリストを返し、明らかに基準を満たしていないリストを試行し続けます。
Prolog に、長すぎるリストや繰り返し項目を含むリストを試さないようにするにはどうすればよいですか?
list - プロローグ: インスタンス化されていない値を持つリストのメンバーを削除します
thisと同様に、リスト上の要素のすべての出現を削除したいのですが、私の場合、リストにはインスタンス化されていない変数が含まれている可能性があります。例えば:
と
delMember を次のように定義してみました。
この定義では、私が得た最後の結果は正しいですが、その前に変数をインスタンス化しようとしています。
何か案は???
prolog - dif/2 制約を含む可換性を検証する方法は?
特に (\=)/2 と (\==)/2 のいくつかの非宣言性に対する救済策として、dif/2 制約の周りには多くの誇大宣伝があります。この非宣言性はしばしば非単調性として特徴付けられ、非可換性の例が示されています。
しかし、dif/2 を含むテスト ケースが交換可能かどうかをテストする手段は何でしょうか。これが私がやりたいことのメタ説明です:
可換性テストを行い、両方のバリアントが同じ結果になることを調べたいと思います。
したがって、通常、(==)/2 組み込み述語を使用して、可換性をチェックすることになる場合は、単調性をチェックできます。この述語は、インスタンス化された変数に続くためです。
しかし、制約を生成するケースをテストしている場合、call_with_residue/2 では十分ではなく、制約の等価性も必要です。次の例に示すように、これは難しい場合があります。
続行する方法はありますか?
免責事項、それは罠です。
私は、良い述語と悪い述語を仕様に対して分離できる優れたテスト方法として交換性テストを推奨しません。通常、良い述語と悪い述語の両方が可換性に問題がない可能性があるためです。
dif/2 制約の等価性を調べる手段として可換性テストを使用しています。この等価性は、より伝統的なテスト ケースで検証ポイントとして使用できます。
list - `var(A)` と実行順序
このページhttp://www.ic.unicamp.br/~meidanis/courses/mc336/2009s2/prolog/problemas/の演習 09 では、繰り返される要素をサブリストにパックする述語を作成するよう求められます。
簡単な解決策は簡単です
ここで、分割はsplit(Head, Tail, HeadGroup, Rest)
次のように定義されます
これは問題なく動作し、上記の Web ページで提供されているサンプル ソリューションとほぼ一致しています。
このソリューションが失敗するのは、のようなクエリですpack(X, [[a], [b, b]]).
。2 つの解セット間の対応は全単射 (すべてA
のpack(A, B)
には 1 つしかないB
ため) であるため、より良い解が存在するはずです。
それを解決する1つの方法は、評価の順序を変更することです。これにより、プロローグが次のような引数のタイプに応じて非無限分岐を選択できるようになります
これに関して2つの質問。
まず、これは信じられないほど醜いので、引数の型に応じてルールの順序を選択するより良い方法はありますか?
第二に、おそらくもっと複雑な質問ですが、 を使わずvar(A)
にソリューションを書き直す方法はありますか? そうでない場合、その理由は?
prolog - Prolog : 逆の結果を得る
私は次のコードを持っています:
または :
私は問題が否定であることを知っており、same_position
たとえば反対の結果を得たいと思っています。
M. @CapelliC は私に使用を提案しましたdif/2
が、これを私の特定の例に適用する方法がわかりません。
list - Prolog のリストの先頭のゼロを削除する
[0, 0, 0, 1, 2, 0, 3] のように、先頭にゼロの数が不明なリストがあります。[1, 2, 0 , 3] のように見えるように、このリストから先頭のゼロを削除する必要があります。
ここに私が持っているものがあります:
その出力は単純に True です。トレースを読み取ると、先行ゼロのないリストができるまで実行されていることが示されますが、その後、回答はスタックに反映されません。私はPrologにかなり慣れていないので、それを行う方法がわかりません。