Возможно ли в Prolog подсчитать количество прямых дочерних узлов родителя, используя рекурсию без retract
/aggregate
и т. д.?
Например, скажем, у нас есть следующее:
parent(p1, child_node1).
parent(p1, child_node2).
parent(p1, child_node3).
parent(p1, child_node4).
parent(child_node1, another_node1).
parent(child_node1, another_node2).
parent(child_node2, another_node3).
parent(child_node2, another_node4).
parent(child_node3, another_node5).
parent(child_node3, another_node6).
parent(child_node4, another_node7).
parent(child_node4, another_node8).
Как с помощью рекурсии подсчитать, что p1 имеет 4 прямых дочерних узла?
findall/3
? Использование рекурсии сделает программу неэффективной, так как она по сути каждый раз будет делать очередной обход дерева вычислений. - person Willem Van Onsem   schedule 22.09.2019retract
/aggregate_all
илиfindall/3
, но без них у меня не было большого успеха. Мои текущие мысли состоят в том, чтобы создать список и заполнить его детьми, а затем подсчитать его длину. Однако, будучи новичком в Прологе, я чувствую, что что-то упускаю, не зная, как мне быть уверенным, что я не зацикливаюсь вечно на одних и тех же дочерних элементах. - person curiousMinded   schedule 22.09.2019