Я новичок в Прологе и до сих пор привыкаю к его логике.
У меня есть задача создать функции, которые превращают натуральное число в "S-число" и наоборот.
Таким образом, номер 0 будет 0
.
Номер 1 будет s(0)
.
Номер 2 будет s(s(0))
.
И так далее.
nat(0).
nat(s(0)):- nat(X).
Функция нахождения натурального числа для заданного S-числа у меня уже есть:
s2nat(0, 0) :- !.
s2nat(s(S),Number) :- s2nat(S,NewNumber), Number is NewNumber + 1.
Таким образом, ?- s2nat(s(s(s(0))), X)
даст X=3
в качестве вывода.
Теперь мне нужно написать функцию, которая делает обратное: возвращает S-число для заданного натурального числа.
И вот я застрял. Я не совсем понимаю, как написать условие, чтобы Пролог понял, что мне нужно вернуть s(S)
. Условие Number is NewNumber + 1
больше не работает, чтобы вернуться и добраться до «0».
У тебя есть какой-нибудь совет?
sick logic
, а потом ждете помощи? - person Guy Coder   schedule 10.04.2020Number is NewNumber + 1
работает для повышения от 0,NewNumber is Number - 1
будет работать для снижения до 0. - person Will Ness   schedule 10.04.2020