最近、論理プログラミングの大学レベルの試験で遭遇した質問でodd/1
、与えられた値が奇数かどうかを判断する Prolog 述語 をプログラミングするように求められました。
s/1
実装は、指定された要素の後続 (つまり X + 1) を評価する、既に指定された predicate を使用することになっていました。odd/1
これは述語の実装のために与えられた解決策でした:
odd(s(0)):-!. % 1 is the first odd number
odd(s(s(X))):- odd(X). % A number s(s(X)) (i.e X + 2) is odd if X is odd as well
!
最初の式の は実際に何らかの目的を果たしますか? この後、後戻りを防いでいるのはわかっていますが、次のような表現はありませんか? これは、解決アルゴリズムがこの時点で停止するということですか?- 練習のために後継述語を実装しようとしましたが、実装
s/1
できませんでした。(どのように) この述語を Prolog で実装できますか?