私のファイルには、かなり自明な次のプロローグ式があります。このルール (1 と呼ぶ) に必要なすべての必須関数を実装し、正しくテストしました。
cal(plus(X,Y),Z):-cal(X,int(Z1)),cal(Y,int(Z2)),add(Z1,Z2,Z3),Z=int(Z3) ; cal(X,real(Z1)),cal(Y,real(Z2)),add(Z1,Z2,Z3),Z=real(Z3).
何時間も試した後、次のことがわかりませんでした。
?-call(plus(int(9),int(10)),Z).
正しく動作し、戻ります:-
Z = int(19).
しかし、それは統一しません
?-call(plus(real(9.0),real(10.0),Z).
私は多くのことを試しましたが、これはルール1の整数部分(;の前)が実部分よりも最初に指定されたためであると結論付けました(2つを交換したところ、逆の方法で機能し始めました)。前編との融合を図りながら繰り返していく。そこにはそのような事実がないので、無限ループに陥ります。同じことを行う別の方法を指定してください。これが私の割り当ての残りの部分であり、私は何時間もそれに打ちのめされています。
前もって感謝します!