問題タブ [clpfd]
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 - clpfd Prologライブラリを使用してゼブラパズル(別名アインシュタインパズル)を解く
選択した制約ソルバーを使用してゼブラパズルを解く演習を行い、Prologclpfdライブラリを使用して試しました。
Prologでこの問題を解決する他の慣用的な方法があることを私は知っていますが、この質問は特にclpfd
パッケージに関するものです!
だから私が解決しようとしているパズルの特定のバリエーション(それらがたくさんあるとすると)はこれです:
5軒の家があります
- イギリス人は赤い家に住んでいます
- スウェーデン人は犬を飼っています
- デンマーク人はお茶を飲むのが好きです
- 緑の家は白い家に残されています
- 温室の所有者はコーヒーを飲みます
- ポールモールを吸う人は鳥を飼っています
- 真ん中の家でミルクを飲む
- 黄色い家の所有者はダンヒルを吸う
- ノルウェー人は最初の家に住んでいます
- マールボロ喫煙者は猫の飼い主の隣に住んでいます
- 馬の飼い主はダンヒルを吸う人の隣に住んでいます
- ウィンフィールド喫煙者はビールを飲むのが好きです
- ノルウェー人は青い家の隣に住んでいます
- ドイツ人はロスマンを吸う
- マールボロ喫煙者には、水を飲む隣人がいます
私は次のアプローチでそれを解決しようとしました:
家が持つことができる各属性は、「英国」、「犬」、「緑」などの変数としてモデル化されます。属性は、それらが発生する家に応じて、たとえば変数の場合、1〜5の値を取ることができます。 「犬」は値3を取り、犬は3番目の家に住んでいます。
このアプローチにより、次のような隣接制約のモデル化が容易になります。
しかし、どういうわけか、clpfd
(IMO)問題が正しくモデル化されていても、パッケージは解決策を生成しません(Choco制約ソルバーでまったく同じモデルを使用し、結果は正しいものでした)。
完全なコードは次のとおりです。
内の概念を誤解しましたかclpfd
、それともここで明らかな何かを単に見逃していますか?それが役立つ場合は、ここでChocoとScalaを使用して実装された同じアプローチを見つけることができます。
編集:ソルバーが問題を解決できないと私が信じる理由は、変数の明確な値が出てこないためですが、「魚1..3 \/5」などの範囲のみが出てくるからです。
list - プロローグで与えられた数値の合計を取得するにはどうすればよいですか?
私はプロローグが初めてで、練習のためにいくつかの演習を行っています。そのため、リスト内の指定された数値の合計を取得しようとしています。私はこれを使用しようとしています:
(ここから)
私のガイドとして。したがって、これは合計を取得するための私のコードです:
私がそれをコンパイルすると、それは言う
practice.pl:3: 評価可能な
listsum(_G139,_G140)
ものは存在しません
practice.pl:2: シングルトン変数:[X]
その後、試してみるlistsum(0, [1,2,3]).
と返されますfalse
。
プロローグ、プロローグのリストと再帰についてはまだよくわかりません。
prolog - Prolog で多項式を追加するには?
次のタスクがあります。
2 つの多項式を追加するメソッドを作成します。つまり、0+2*x^3 と 0+1*x^3+2*x^4 は 0+3*x^3+2*x^4 になります。
次のコードも書きました。
私の問題は、停止する方法がわからないことです。引数の 1 つが null の場合は停止し、2 番目の引数を 3 番目の引数に追加したいと思います。しかし、それらがnullであることを確認するにはどうすればよいですか? ありがとう。
prolog - Prologでキューブのリストを計算します
だから私はSWI-PrologでいくつかのPrologをやっていて、ちょっとした問題に出くわしました。入力リストを指定して、キューブのリストを作成する必要があります。私が現在持っているコードは
私が実行すると、エラーが発生します。具体的には...
このエラーが発生している理由は完全にはわかりませんが、最後の行で発生しているようです。CubesはNewCubesです。どんな助けでも大歓迎です:)
prolog - セカンドエンドビューパズル、プロローグ
Second End View Pazzles 7*7 (例http://www.funwithpuzzles.com/2009/10/abcd-second-end-view-ev4.htmlこの 5*5 のように)を解決するために swi-prolog でコードを記述します。数字 1 ~ 6
それを解決するためにどのようにロジックを書く必要があるか、おそらく4 * 4または5 * 5のより単純な例で..私はどんな助けにも満足しています. 私は3つのテストのためにそれを書く必要がありますが、それは1つでも問題ありません。
prolog - gnuPrologのEndViewゲーム
一般的な問題:マップ8 * 8があり、空の正方形に1から6までの数字を入力する必要があります。ただし、各列と生の数字は1回だけ満たす必要があります。各行と列の2つの正方形は空のままです。上と下の両側の数字は、表示されるはずの最初の数字を示しています(ただし、2つの空の正方形の後に表示される場合があります)。
だから、今私はこのコードを持っています、それは最終的に4*4マップのswi-prologで動作します。
しかし、8 * 8パズルのように、より大きな領域に2つの空の場所があるという問題はサポートされていません。ヒントはありますか?
prolog - Prologで条件付き計画のようなものを書く方法は?
C#で書かれた学生プログラムを理解できるプロローグコードを書いてみました。今、私は学生のプログラムの「if」ステートメントを認識する過程で立ち往生しています。例: 以下は、学生に期待するコードです。
この予想されるコードの目標を次のように定義しました。
問題は、上記の学生コードをプロローグの事実とルールでどのように表現して、可能な条件に対して目標が満たされているかを確認する方法です。
学生コードの最初の部分を次のようなファクトになるように変更しようとしましたが、prolog で学生の 'if' ステートメントをファクト/ルールとして表現する方法がよくわかりません (おそらく、prolog に変更しないでください)。 「もし」ですよね?)
もう 1 つは、私の目標では、演算子よりも大きいプロローグを使用できないと思うような比較があるgt(Vd,0)
場合、Vd の値が実際にはユーザーによって入力された特定の値ではなく、シンボリック値として表されます (この場合は : )。Vd> 0
Vd @> 0
val_d
注:上記の目標を使用して、学生コードを次のコードに変更すると、定義された目標が満たされると思います。
また
しかし、繰り返しになりますが、目標を達成するために、このコードをプロローグでアクション/ルール/ファクトとしてどのように表現できるかについて、ヘルプ/アイデアが必要です。
どんな助けでも本当に感謝しています。
どうもありがとう
prolog - 変数のプロローグで使用する関係演算子
次のコードを書いていますが、完璧な結果が得られています。
ここで次のようにクエリすると
私は正しい応答を取得します。しかし、いいえ、D<50 の結果を取得したいと思います。実行する方法?
numbers - プロローグは数字をローマ数字に変換します
整数をローマ数字に変換するこのコードがあります。整数をローマ数字の入力と比較し、それが try か false かを示す関数を追加する必要があります。たとえば、roman(v,5) です。真実