Я натолкнулся на эту оценку натуральных чисел логических чисел в учебнике, и у меня возникла головная боль:
natural_number(0).
natural_number(s(N)) :- natural_number(N).
Правило примерно гласит, что: если N
равно 0
, это естественно, если мы не пытаемся рекурсивно отправлять содержимое s/1
обратно в правило, пока содержимое не станет 0
, тогда это натуральное число если нет, то это не так.
Итак, я протестировал вышеуказанную логику, подумал про себя, ну, это работает, если я хочу представить s(0)
как 1
и s(s(0))
как 2
, но я бы хотел иметь возможность преобразовать * Вместо 1014 * 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).
Так что теперь я могу использовать его, как я хотел, спасибо всем!