Я очень новичок в Prolog. Моя цель - добавить целые числа в список, вплоть до привязки: , если функция получает N
, она выдает список [N, N-1, ... , 1]
.Как добавить число в список в пролог?
Вот мой код:
myAppend(0, L) :- append([],[], L).
myAppend(N, L) :- append([N], [], L), N1 is N - 1, myAppend(N1, L).
вызова функции выше возвращает ложь для каждого N=\=0
:
51 ?- myAppend(0,L).
L = [] ;
false.
52 ?- myAppend(2,L).
false. <-------------------- was expecting L = [2, 1]
53 ?-
Однако, когда я изменил свою функцию (поставить точку .
вместо ,
после позвоните по номеру append
во втором правиле):
myAppend(0, L) :- append([],[],L).
myAppend(N,L) :- append([N], [], L). N1 is N - 1, myAppend(N1, L).
я получил следующий вывод:
51 ?- myAppend(0,L).
L = [] ;
false.
52 ?- myAppend(4,L).
L = [4] . <-------------- was expecting [4, 3, 2, 1]
53 ?-
Я не могу понять, почему в 1-й реализации я получал false
, хотя логика за ним правильно?
Что вы ожидаете от 'append ([N], [], L)'? Знаете ли вы, что делает 'append/3'? у вас есть какое-либо понятие _unification? _ –
@gniourf_gniourf, да, я использую его, чтобы добавить в список один номер. в качестве примера я смог сделать это после того, как я изменил код, как я показал в вопросе выше. он добавляет [N] к [] и помещает результат в L. – ThunderWiring
Знаете ли вы, что изменение ',' на '.' изменило одно правило на два правила? Вы не получили сообщение об ошибке «Полная остановка в разделе-тело? Не можете переопределить,/2', когда вы сделали изменение? –