我打算使用断言基于现有事实制作新事实。 但是,要做的事实数量将超过500,因此输入分号进一步的步骤变得相当繁琐。 因此我想忽略或传递'true'(在SWI PROLOG中)
有没有办法解决这个问题?(例如,自动传递所有'真实的......)
这是我的代码的一部分
%initialize
initialize :-
discipline(X,Y),
assert(result(X,0)).
我在纪律(X,Y)中有太多的X ..
答案 0 :(得分:1)
也许
?- forall(a_fact(F), your_fact_processing(F)).
答案 1 :(得分:-1)
在这个特定情况下forall
is actually preferred,但一般来说,在Prolog中你必须依赖语言的机制进行这种迭代。以下是您的案例示例:
initialize:-
discipline(X,Y),
assert(result(X,0)),
fail.
initialize.
在上面的这段代码中,您告诉解释器初始化应该通过backtracking mechanism执行所有“断言”给定可能的规则。 除非您对此非常熟悉,否则Prolog永远不会为您“点击”。
请注意,在此示例中initialize
永远不会失败,即使没有规则(因此也没有结果)断言。你需要一些额外的工作来检测像这样的边缘情况 - 这就是为什么forall
实际上更适合这个断言许多事实的特定任务的原因。
另请注意,如果最好不要声明单例变量,则可以使用不使用的变量以“_”(下划线)字符开头的符号。