Я пытаюсь создать правила Prolog для перечисления «бинарных деревьев» в форме списка в Prolog. Я новичок в Prolog.Перечисление двоичных деревьев в Prolog
Дерево с 0 узлов является пустым списком:
[]
Дерево с 1 узла:
[[],[]]
Дерево с 2 узлами имеет 2 возможности:
[[],[[],[]]]
[[[],[]],[]]
и так далее.
Вот мои правила:
bintree(0,[]).
bintree(1,[[],[]]).
bintree(N,[Lc,Rc]) :-
N > 1,
bintree(N1,Lc),
bintree(N2,Rc),
N1 >= 0,
N2 >= 0,
N3 is N1+N2+1,
N==N3.
запросов на 0 и 1, очевидно, работают. Для N = 2 он печатает одну из возможностей, но дает ошибку после ввода точки с запятой, чтобы получить другую возможность. Запросы для N> 2 напрямую дают ошибку. Ошибка всегда одинакова:
ERROR: >/2: Arguments are not sufficiently instantiated
Я прочитал об этой ошибке на некоторых веб-сайтах, но я не могу понять, что является причиной этой ошибки здесь.
Спасибо за вашу помощь заранее.
просто удалить 'N> 1' – CapelliC
Нет, что делает его идти в бесконечный цикл. – 1026501
Чтобы использовать компаратор выражений в Prolog, все выражения должны быть полностью инстанцированы (значения известны). У вас есть ошибка, потому что 'N' не имеет значения, когда вы пытались« N> 1 ». Какой запрос вы пытаетесь удовлетворить? Это не совсем ясно в вашем вопросе. – lurker