問題タブ [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.
prolog - dif/2 を使用して生成されたシーケンスの重複を防ぐ方法は?
この質問は、重複する要素の有限セットから形成されたすべてのシーケンスを生成する (ビットを一般化する)に関する StackOverflow に関する別の質問に答えているときに出てきました。
ボリスがコメントで正しく示したように、この問題には多くの既存の解決策があります。ただし、アキュムレータ (つまり、新しく選択された要素と比較される既に選択された要素のリスト) を使用せず、dif/2
代わりにステートメントを使用するソリューションに興味があります。
説明のために、次のプログラムには 4 つの要素があり、4 回の再帰呼び出しの後、div/2
これまでに選択された 4 つの要素がペアごとに異なることを示すいくつかのステートメントがあります。このことから、再帰を続けて 5 番目の要素を探すのは無意味であると推測できます。これは、div/2
ステートメントに与えられた要素が残っていないためです。この「知識」をプログラムにエンコードして、ループしないようにする方法はありますか?
現在のループ動作:
prolog - Prolog で独自の結果を得る
を返すこの Prolog コードがあります: [[vincent,vincent],[vincent,marcellus],[marcellus,vincent],[marcellus,marcellus],[pumpkin,pumpkin],[honey_bunny,honey_bunny]]
.
X != Y の場合にのみ結果を取得する方法は? 以前と同じ結果を得るために、次のコードを試しました。
で\=
、私は を得[]
ました。結果としてのみ取得する方法は[vincent,marcellus]
?
list - リスト内の要素の出現をカウントしたい
リスト内の要素の出現をカウントしたいのですが、存在する場合は一意の述語が真になり、そうでない場合は偽になります。ただし、要素が複数回出現する場合、Prolog はそれが true であると判断します。どうすればいいのかわからない...
list - プロローグのリストからサブリストのすべての出現を削除するにはどうすればよいですか?
これは、特定のリストから要素を削除または削除するためのコードです。
リストからサブリストのすべての出現を削除できるように、どのように変更できますか?
要素にリストを入れようとすると、要素が一度だけ削除されます。
これは次のようになります。
prolog - different/2 - 純粋で確定的な定義は存在するか?
member/2
andを使用したこの定義は、宣言的な観点からnon_member/2
はほぼ完全ですが、特定のクエリに対して冗長なソリューションが生成され、選択ポイントがあちこちに残されます。
これを改善する定義は何ですか (おそらく and を使用する純粋な方法if_/3
で(=)/3
) によってまったく同じソリューションのセットが記述されdifferent/2
ますが、少なくとも地上のクエリに対して決定的であり (したがって、無駄な選択ポイントを開いたままにしません)、省略します (可能であれば)冗長な答えはありますか?
1
実際、different([a|nonlist],[]), different([],[b|nonlist])
成功します。同じように失敗する可能性があります。したがって、両方で失敗する解決策は問題ありません (おそらくさらに細かいことです)。