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