Я пытаюсь написать программу Prolog с правилом good
, который берет список, где каждый термин в списке является числом Peano. Правило должно быть истинным тогда и только тогда, когда каждый элемент в списке больше предыдущего.Программа Prolog - список чисел Peano - правило возвращает несколько ответов
Например, следующие примеры должны быть правдой:
good([]).
good([0]).
good([0,s(0)]).
good([0,s(s(0))]).
good([0,s(0),s(s(0))]).
И следующие примеры должны быть ложными:
good([s(0),0]).
good([0,s(0),0]).
Вот мой код:
plus(X,0,X).
plus(X,s(Y),s(Z)) :- plus(X,Y,Z).
geq(X,Y) :- plus(K,Y,X).
ge(X,Y) :- geq(X,Y), not(X = Y).
good([]).
good([X]).
good([H|T]) :- good(H,T).
good(X,[H|T]) :- ge(H,X), good(T).
Однако, для положительного запроса good([0,s(0),s(s(0))])
, как true, так и false являются решениями.
Какая ошибка?
Альтернативное решение: 'good (L): - msort (L, L) .' – ssBarBee
@ssBarBee:' msort/2' следует заменить на 'sort/2'. Элементы должны быть только выше. – false