这是一个简单的问题:我在Prolog教科书中看过这个例子。 它正在使用剪切实现if-then-else。
if_then_else(P, Q, R) :- P, !, Q.
if_then_else(P, Q, R) :- R.
任何人都可以解释这个程序在做什么,以及它为什么有用?
答案 0 :(得分:3)
关于这个程序最重要的一点就是不是一个很好的关系。
例如,从纯逻辑程序中,如果我们将结果传递给它,我们希望能够得出条件是否已经。这当然与程序编程形成对比,在程序编程中,您首先检查条件,其他一切都取决于条件。
还违反了其他属性。例如,如果条件实际回溯会发生什么?假设我想看到每个条件解决方案的结论,而不仅仅是第一个。您的代码会削减这些额外的解决方案。
我还想在其他情况下使用该关系,例如,假设我想在我的代码中检测多余的 if-then-else结构。这些是类似于:
的查询解决方案?- if_then_else(NoMatter, Same, Same).
如果if_then_else/3
是纯关系,我们可以使用它来回答此类查询。由于目前已实施,因此会为此类查询产生不正确的结果。
有关详细信息,请参阅logical-purity和if_/3
。