Как нарисовать поисковое дерево в прологе?
Мне нужно знать, как я могу нарисовать дерево поиска для конкретного запроса и как я могу проследить код в прологе, и вот пример:
mystery([], []).
mystery([b,a|XS], [z,z|YS]) :- mystery(XS, YS).
mystery([X|XS], [X|YS]) :- mystery(XS, YS).
а) Нарисуйте дерево поиска для следующего запроса:
?- mystery([b,a,b,a,b], Z).
1 ответ
Я собираюсь рассказать вам, как мы научились рисовать дерево поиска для запроса
?- mystery([b,a,b], Z).
который похож на ваш, так что вы можете понять, как нарисованы поисковые деревья, и создать их для своего упражнения.
?- mystery([b,a,b],Z)
(1st solution) / \ (2nd solution)
/ \
Z = Z' Z = Z'
L'= [b] L' = [a,b]
mystery(L',Z') mystery(L',Z')
| |
| |
Z'= Z" L" = [b]
L" = [] Z' = Z"
mystery(L",Z") mystery(L",Z")
| |
| |
Z" = [] L''' = []
Z' = [b] Z" = Z'''
Z = [z,z,b] mystery(L''',Z''')
|
|
Z''' = []
Z" = [b]
Z' = [a,b]
Z = [b,a,b]
Все шаги выполняются, пока выполняются факты и правила. Если вы не можете понять, как работает ваша программа, я предлагаю вам использовать режим трассировки во время ее выполнения.