Я попробовал предложение из чьего-то комментария в другом посте о том, как превратить дерево в список. Однако у меня где-то есть (или что-то еще) необъявленные переменные, поэтому мои значения в моем списке [_G667, _G673, _G679] вместо [5, 2, 6], что является правильным ответом. Насколько мне известно, все манипуляции верны.
Вот код:
flatten( Item , []).
flatten( tree(Left, Val, Right), List) :-
flatten(Left, List1),
append(List1, [E], List2),
flatten(Right, List3),
append(List2, List3, List).
Я использовал следующий запрос:
?- flatten(tree(tree(nil, 2, nil), 5, tree(nil, 6, nil)), L).
Кто-нибудь видит проблему с переменной? Я думал, что это может быть в первой строке (с Item), но если я изменяю Item на item, запрос немедленно возвращает false.
Я написал только несколько программ на Прологе, так что для меня это все еще новая концепция.