0

这是一个简单的问题:我在 Prolog 教科书中看到了这个例子。它正在使用 cut 实现 if-then-else。

if_then_else(P, Q, R) :- P, !, Q.
if_then_else(P, Q, R) :- R.

谁能解释这个程序在做什么,为什么它有用?

4

1 回答 1

3

关于这个程序,最重要的是要注意它绝对不是一个很好的关系。

例如,从纯逻辑程序中,如果我们将结果传递给它,我们期望能够推导出条件是否成立。这当然与过程编程相反,在过程编程中,您首先检查一个条件,其他一切都取决于条件。

还违反了其他属性。例如,如果条件实际上回溯会发生什么?假设我想看到条件的每个解决方案的结论,而不仅仅是第一个。您的代码删除了这些额外的解决方案。

我还想在其他情况下使用该关系,例如,假设我想检测代码中多余的 if-then-else 结构。这些是类似于以下查询的解决方案:

?- if_then_else(NoMatter, Same, Same).

如果if_then_else/3是纯关系,我们可以用它来回答这样的查询。由于它目前正在实施,它会为此类查询产生不正确的结果。

请参阅if_/3更多信息。

于 2016-05-27T06:52:31.447 回答