我正在使用数据记录教育系统(DES),我想创建一个示例演绎数据库,它递归地导出组件的整体价值,这些组件也可以有子组件以及常规部件。如果不是因为我不能阻止递归和非递归子句被执行的事实,它将工作得相当好。以下是产生问题的条款:
kop_as(A,B,C) :-
assembly(A,C),
sum(rek_as(A,D),D,B).
rek_as(A,B) :-
a_s(A,C,Y),
viena_as(A,D,_),
rek_as(C,E),
B=(D+E)*Y.
rek_as(A,B) :-
viena_as(A,B,_).
在这种情况下,输出基本上加倍,因为第一个rek_as和第二个rek_as子句都被执行。基本上我想做这样的事情:
kop_as(A,B,C) :-
assembly(A,C),
sum(rek_as(A,D),D,B).
rek_as(A,B) :-
a_s(A,C,Y),
viena_as(A,D,_),
rek_as(C,E),
B=(D+E)*Y,!.
rek_as(A,B) :-
viena_as(A,B,_).
但这只是给我一个关于使用错误语法的编译错误。
答案 0 :(得分:1)
没关系,我几分钟后找到了解决方案。解决方案根本不是在recursive子句中进行计算,而是将所有数字运算留给非递归子句。