当前位置:  开发笔记 > 人工智能 > 正文

编程中的削减是否有害?

如何解决《编程中的削减是否有害?》经验,为你挑选了2个好方法。

嘿伙计们我这学期正在学习人工智能课程,我们正在学习Prolog.我们的讲师告诉我们尽量避免在我们的任务中使用削减,但是,对于我似乎无法避免使用它们的几个问题.我只是好奇为什么削减被认为是罪(讲师的话)?我知道这是一种捷径,但我已经习惯了解它们如何影响我的节目.

谢谢.



1> Daniel Lyons..:

我同意@dasblinkenlight和@mbratch.此外,我认为从绿色削减和红色削减方面考虑是有帮助的.

绿色切割不会影响程序的逻辑行为,只会影响性能.它们是你告诉Prolog你知道它是否继续下去它不会带来任何成果的一种方式.绿色削减从来都不是必需的 - 它们只是提高了性能.当你第一次学习Prolog时,还有很多东西需要处理,它似乎为一个小的好处增加了额外的复杂性.

红色切割确实会影响程序的行为.正如@mbratch所说,新用户经常会削减产量以"整理"产量.新用户经常将Prolog查询提示视为其程序的用户界面.这些切割使得它们的谓词不那么通用,并且在使输出更好的过程中不太有用.还有一些更清晰的选择,比如once/1给你一个结果.专家们非常谨慎地使用红色切割 - 有些情况下它比逻辑方法更有效 - 但如果你能够获得纯粹的逻辑公式,那就更好了.通常,使用cut的错误的谓词会出现"向后正确性"的问题,这些问题会在您依赖谓词作为其他谓词的一部分时出现.这些可能很难调试和修复.

我不确定我会称他们为"罪",但我主要同意你的教授为初学者.如果您在不使用切割的情况下在逻辑上解决问题方面经验丰富,那就最好了.然后,当你更好地理解什么是容易的和什么是困难的时候,可以引入剪切.尽早使用它会让你依赖它作为程序编程的拐杖.



2> false..:

在开始时,尝试着重于Prolog的纯粹声明部分,原因很简单:正是Prolog与其他编程语言区别开来的部分.专注于语言的纯粹,单调的部分,并完全避免削减.你怎么能指望你沉浸在这种编程范式中?

但是,你肯定会遇到一些挑战.特别是在尝试编码if-then-else结构和一般否定时.当这样的构造的条件需要成功的if-part并且需要为then-part失败时,你将进入非单调代码.但是,Prolog从未构建为以干净的方式处理此类代码

相反,Prolog只知道if-then规则.所以基本上你会有一个规则用于一个部分而另一个用于另一个部分.一开始你会觉得很不寻常,但它允许你体验非常纯粹的代码.

有关纯代码的示例,请参阅我的页面.

另请参见:良好的Prolog代码的功能? 有趣的是,有趣的问题总是在SO上关闭.

对于绿色或红色切割,简单地认为几乎没有绿色切割.因为,如果你想以安全的方式使用切割,你将不得不添加额外的条件("防护"),否则没有任何意义.它确实适用于优化器,编译器编写器等.

没有if和else语句的Prolog

知道何时使用cut in prolog

为什么双重否定在Prolog中没有约束力

为了使我的答案更加平衡,下面是一个通过cut来提高效率的简洁方法示例:

Prolog附加切割操作符

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有