Я наткнулся на эту оценку логических чисел натуральными числами в учебнике, и это дало мне некоторую головную боль:
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).
Теперь я могу использовать его так, как я хотел, спасибо всем!