Swi Prolog中如何通过规则而非查询实现元素计数?
SWI-Prolog 子节点计数规则实现
前置基础代码(事实与已有规则)
% 事实定义 parent(child, parent). parent(child, parent2). parent(child2, parent). parent(child2, parent2). % 已定义的子节点查询规则 childof(X, Y) :- parent(Y, X).
number_of_child 规则实现
直接通过findall/3收集所有符合条件的子节点,再用length/2统计数量即可,规则写法如下:
% X:父节点,Y:X对应的子节点总数 number_of_child(X, Y) :- findall(Child, childof(Child, X), ChildList), length(ChildList, Y).
测试验证
执行查询:
?- number_of_child(parent, Y).
返回结果:
Y = 2
查询number_of_child(parent2, Y)也会得到相同结果,符合预期。
内容的提问来源于stack exchange,提问作者ZonG
相关产品推荐
相关产品推荐

