Преобразование числа Пеано s (N) в целое в Прологе

Я наткнулся на эту оценку логических чисел натуральными числами в учебнике, и это дало мне некоторую головную боль:

natural_number(0).
natural_number(s(N)) :- natural_number(N).

Правило примерно гласит, что: if N равно ] 0 это естественно, если нет, мы попытаемся рекурсивно отправить содержимое s / 1 обратно в правило до тех пор, пока содержимое не станет 0 , тогда это натуральное число, если не тогда это не так.

Я протестировал логическую реализацию выше и подумал: «Хорошо, это работает, если я хочу представить s (0) как 1 и s (s (0 )) как 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).

Теперь я могу использовать его так, как я хотел, спасибо всем!

6
задан repeat 4 June 2015 в 00:32
поделиться