チュートリアルで論理数のこの自然数評価に出くわしましたが、頭痛の種になっています。
natural_number(0).
natural_number(s(N)) :- natural_number(N).
このルールは大まかに次のように述べています:N
が自然数である場合、そうでない場合は、の内容が になるまで再帰的にルール0
に送り返そうとします。そうでない場合は自然数ではありません。s/1
0
s(0)
そこで、上記のロジックの実装をテストして、 as1
およびs(s(0))
asを表現したい場合はうまくいくと思いましたが、代わり2
に に変換できるようにしたいと考えています。s(0)
1
私は基本ルールを考えました:
sToInt(0,0). %sToInt(X,Y) Where X=s(N) and Y=integer of X
ここに私の質問があります: s(0) を 1 に、s(s(0)) を 2 に変換するにはどうすればよいですか?
回答済み
編集:私が受け入れた答えが私に向けた実装の基本ルールを変更しました:
decode(0,0). %was orignally decode(z,0).
decode(s(N),D):- decode(N,E), D is E +1.
encode(0,0). %was orignally encode(0,z).
encode(D,s(N)):- D > 0, E is D-1, encode(E,N).
これで思い通りに使えるようになりました、ありがとうございます!