2

私はPrologが初めてで、この演習を解決しようとしています:

greater_than/2この講義で紹介した記法で 2 つの数字 (つまり0, succ(0), succ(succ(0))...) を引数として取り、1 つ目が 2 つ目より大きいかどうかを判定する述語を定義します。例えば:

?- greater_than( succ(succ(succ(0))), succ(0) ).
yes.
?- greater_than( succ(succ(0)), succ(succ(succ(0))) ). 
no.

これまでの私の答えは次のとおりです。

greater_than(X, 0).
greater_than( succ(succ(X)), succ(Y) ).

もちろんうまく動かないので、誰かに助けを求めています。ありがとう。

4

1 に答える 1

6

再帰的な解決策を探しているので、基本ケースと再帰的なステップを提供する必要があります。あなたが提供したベースケースはほぼ正しいです。ただし、たとえば両方の数値がゼロの場合は成功するため、失敗します。左側がフォームsucc(_)で、右側がゼロの場合にのみ成功するはずです。

再帰ステップは、各側から要素を取得し、再帰を適用する必要があります。したがって、これはうまくいくはずです:

greater_than(succ(_), 0).
greater_than(succ(X), succ(Y)):-
  greater_than(X, Y).
于 2012-07-14T21:04:50.403 に答える