Бинарные деревья задаются с помощью тернарного функтора tree(Left,Root,Right), где Root - элемент, находящийся в вершине, а Left и Right - соответственно левое и правое поддерево. Пустое дерево изображается атомом nil. Следующий терм является примером более сложного дерева tree(nil, 5ц, tree(nil, 6, tree(tree(nil, 8, nil), 10, nil))).
Напишите предикат p(+T,+X,+Y,–R), который из бинарного дерева T делает бинарное дерево R, совпадающее с T, за исключением того, что вершины дерева, содержащие также в списке X, меняются на соответствующие (по порядку) вершины из списка Y.
Пример,
<b>?– p(tree(nil, 5, tree(nil, 6, tree(tree(nil, 8, nil), 10, nil))),[5,8,7],[50,80,70],R).
R= tree(nil, 50, tree(nil, 6, tree(tree(nil, 80, nil), 10, nil)))
Yes</b>
1)Хотелось бы просто узнать как задать функтор tree(nil, 5, tree(nil, 6, tree(tree(nil, 8, nil), 10, nil))).
Не понимаю
- как задать функтор.
- как рекурсивно задать функтор,
- как распарсить этот функтор для моей задачки
Примеры по типу owner(«Mary», «Garfield») и тп, мне ничего не дают.
Интерпретатор swipl 7.6.3.