Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Prolog 序言:“;如果是,则“否则”;,使用切割_Prolog_Prolog Cut_Logical Purity - Fatal编程技术网

Prolog 序言:“;如果是,则“否则”;,使用切割

Prolog 序言:“;如果是,则“否则”;,使用切割,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. 有人能解释一下这个程序在做什么,为什么它有用吗?关于这个程序最重要的一点是,它肯定不是一个好的关系 例如,从一个纯逻辑程序中,如果我们将结果传递给它,我们希望能够导出条件是否成立。这当然与过程编程不同,在过程编程中,首先检查一个条件,其他一切都取决于该条件 还违反了其他属

这是一个简单的问题:我在Prolog教科书中看到了这个例子。 它使用剪切实现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\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构造在任何语言中都可以做的事情,出于同样的原因,它也很有用。