プロローグ試験のリビジョンの一部に問題があります。
simple/2 と呼ばれる再帰ステートメントを作成する必要があります。使用例は次のとおりです。
simplify(s(p(s(0))),Z)
その結果、Z
s(0) になります。S は後継者、P は前任者を表します。つまり
s(0)
、 は 1、
s(s(0))
は 2、p(0)
は -1 などで、
p(s(p(p(0))))
になりますp(p(0))
。
私が最初に持っていたコードは
check(s(0),s(0)).
check(s(X),s(0)) :- check(X,s(s(0))).
check(p(X),s(0)) :- check(X,0).
しかし、再帰呼び出し中にそれ自体に追加される変数として 2 番目の部分を保持する必要があるため、これは明らかに機能しません。頭がおかしいので30分くらいしたらまた見てみます。