暗号算術パズルを解くための Prolog プログラムを作成する必要があります。
変数 [A, M, P, D, Y] を 0 から 9 の値に割り当てて、方程式 AM+PM を満たす関数 solve([A, M, P, D, Y]) を作成する必要があります。 =日。各変数には異なる値が割り当てられ、A、P、および D は 0 に等しくなりません。
この関数を書き始めましたが、プログラムの実行中に問題が発生しました。A、P、D がゼロにならないという制限を設定しました。アルゴリズムを調べているうちに、D は 1 でなければならないことに気がついたので、プログラムの最初にそれを定義しました。M に対して 2 つの異なる変数 (M1 と M2) を定義し、それらを互いに等しく設定しました。これは、パズル内の異なる M が同じ値に割り当てられる必要があるためです。さまざまな変数に場所を割り当て、パズルに基づいてそれらを合計しました。キャリーイン変数で運ばれる変数を考慮しました。プログラムはコンパイルされますが、関数が実行されません。
solve([A, M1, M2, P, D, Y]):- D is 1,
A/=0,
P/=0,
D/=0,
M1 = M2,
select(M1, [0,2,3,4,5,6,7,8,9], R1),
select(M2, R1, R2),
Y is (M1+M2) mod 10,
C1 is (M1+M2) // 10,
select(Y, R2, R3),
select(A, R3, R4),
select(P, R4, R5),
select(D, R5, R6),
A is (A+P+C1) mod 10,
D is (A+P+C1)// 10.
私は何を間違っていますか?変数の定義に何か問題がありますか? 2 つの異なる M 変数を定義する必要がありますか、それとも 1 つで十分ですか?