Как нарисовать поисковое дерево в прологе?

Мне нужно знать, как я могу нарисовать дерево поиска для конкретного запроса и как я могу проследить код в прологе, и вот пример:

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]

Все шаги выполняются, пока выполняются факты и правила. Если вы не можете понять, как работает ваша программа, я предлагаю вам использовать режим трассировки во время ее выполнения.

Другие вопросы по тегам