Нахождение взвешенной суммы дерева - PullRequest
0 голосов
/ 04 ноября 2019

Я работаю над небольшой программой пролога, чтобы немного поработать с двоичными деревьями, и пытаюсь найти взвешенную сумму дерева. Каждый из узлов имеет значение, и затем его нужно умножить на глубину узла. Я пытался использовать аккумулятор здесь, и я продолжаю получать ошибку, что аргументы не достаточно созданы.

Я начал с использования реализации, найденной здесь: http://people.sju.edu/~jhodgson/ai/accums.html

И это, кажется, довольно стандартная вещь.

Я пытался исключить различные части моего предиката, просто чтобы увидеть, где проблема, и проблема возникает, когда я включаю S1 и S2 в мои вычисления суммы.

tree_wsum(Tree, S) :- tree_wsum(Tree, S, 0).

tree_wsum(nil, Sum, Depth).
tree_wsum(tree(Root, Left, Right), Sum, Depth) :- D1 is Depth + 1, tree_wsum(Left, S1, D1), tree_wsum(Right, S2, D1), Sum is (Depth * Root) + S1 + S2.

D1и вычисление глубины * Root в порядке, но добавление S1 и / или S2 приводит к следующей ошибке:

ОШИБКА: аргументы не созданы в достаточной степени ОШИБКА: В: ОШИБКА: [12] _6020 равен 2 * 1 + _6028ОШИБКА: [11] tree_wsum (tree (1, nil, nil), _ 6060,2) в: 28

1 Ответ

0 голосов
/ 08 ноября 2019

Меня тоже интересует эта тема!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...