Prolog 序言:“;如果是,则“否则”;,使用切割
这是一个简单的问题:我在Prolog教科书中看到了这个例子。 它使用剪切实现if-then-elseProlog 序言:“;如果是,则“否则”;,使用切割,prolog,prolog-cut,logical-purity,Prolog,Prolog Cut,Logical Purity,这是一个简单的问题:我在Prolog教科书中看到了这个例子。 它使用剪切实现if-then-else if_then_else(P, Q, R) :- P, !, Q. if_then_else(P, Q, R) :- R. 有人能解释一下这个程序在做什么,为什么它有用吗?关于这个程序最重要的一点是,它肯定不是一个好的关系 例如,从一个纯逻辑程序中,如果我们将结果传递给它,我们希望能够导出条件是否成立。这当然与过程编程不同,在过程编程中,首先检查一个条件,其他一切都取决于该条件 还违反了其他属
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\u then\u else/3
是一个纯粹的关系,我们可以用它来回答这样的问题。由于目前正在实施,它会为此类查询生成不正确的结果
有关更多信息,请参见和。关于此计划最重要的一点是,它肯定不是一个好的关系 例如,从一个纯逻辑程序中,如果我们将结果传递给它,我们希望能够导出条件是否成立。这当然与过程编程不同,在过程编程中,首先检查一个条件,其他一切都取决于该条件 还违反了其他属性。例如,如果条件实际回溯,会发生什么情况?假设我想看到条件的每个解的结论,而不仅仅是第一个。您的代码删除了这些额外的解决方案 我还想在其他情况下使用该关系,例如,假设我想检测代码中多余的if-then-else构造。这些是查询的解决方案,类似于:
?- if_then_else(NoMatter, Same, Same).
如果If\u then\u else/3
是一个纯粹的关系,我们可以用它来回答这样的问题。由于目前正在实施,它会为此类查询生成不正确的结果
有关更多信息,请参阅和。在开始之前,如果您不知道cut(
!
)操作符的作用,我建议您查找并研究其中一些示例。然后应该在Prolog提示符下执行跟踪
,并使用一些示例运行谓词。非常简单的例子是执行如下查询:if\u then\u else(true,X=3,X=4)。
和if\u then\u else(false,X=3,X=4)
并查看执行顺序。在较高的层次上,它可以做任何if-then-else构造在任何语言中都可以做的事情,出于同样的原因,它非常有用。在开始之前,如果您不知道cut(!
)操作符的作用,我建议您查找它并研究其中的一些示例。然后应该在Prolog提示符下执行跟踪
,并使用一些示例运行谓词。非常简单的例子是执行如下查询:if\u then\u else(true,X=3,X=4)。
和if\u then\u else(false,X=3,X=4)
并查看执行顺序。在较高的层次上,它可以做任何if-then-else构造在任何语言中都可以做的事情,出于同样的原因,它也很有用。