这是一个简单的问题:我在 Prolog 教科书中看到了这个例子。它正在使用 cut 实现 if-then-else。
if_then_else(P, Q, R) :- P, !, Q.
if_then_else(P, Q, R) :- R.
谁能解释这个程序在做什么,为什么它有用?
这是一个简单的问题:我在 Prolog 教科书中看到了这个例子。它正在使用 cut 实现 if-then-else。
if_then_else(P, Q, R) :- P, !, Q.
if_then_else(P, Q, R) :- R.
谁能解释这个程序在做什么,为什么它有用?
关于这个程序,最重要的是要注意它绝对不是一个很好的关系。
例如,从纯逻辑程序中,如果我们将结果传递给它,我们期望能够推导出条件是否成立。这当然与过程编程相反,在过程编程中,您首先检查一个条件,其他一切都取决于条件。
还违反了其他属性。例如,如果条件实际上回溯会发生什么?假设我想看到条件的每个解决方案的结论,而不仅仅是第一个。您的代码删除了这些额外的解决方案。
我还想在其他情况下使用该关系,例如,假设我想检测代码中多余的 if-then-else 结构。这些是类似于以下查询的解决方案:
?- if_then_else(NoMatter, Same, Same).
如果if_then_else/3
是纯关系,我们可以用它来回答这样的查询。由于它目前正在实施,它会为此类查询产生不正确的结果。