Closed. This question is opinion-based。它当前不接受答案。












想要改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。

7年前关闭。



Improve this question




这个学期我正在上一门AI类(class),我们正在学习Prolog。我们的讲师告诉我们要尽量避免在作业中使用削减,但是,对于其中两个问题,我似乎无法避免使用削减。我很好奇为什么削减被认为是一种罪过(讲师的话)?我知道这是一种捷径,但我已经使用它们来确切了解它们如何影响我的程序。

最佳答案

我同意@dasblinkenlight和@mbratch。另外,我认为从绿色分割和红色分割的角度进行思考会有所帮助。

绿色剪切不会影响程序的逻辑行为,只会影响性能。它们是让您告诉Prolog的一种方法,您知道它是否会继续下去不会有任何结果。从来没有必要进行绿色砍伐-它们只是提高了性能。当您初次学习Prolog时,还有很多其他需要解决的问题,这似乎为增加一点好处而增加了额外的复杂性。

出现红点确实会影响程序的行为。正如@mbratch所说,新用户通常会四处剪切以“整理”输出。新用户通常将Prolog查询提示视为其程序的用户界面。这些削减使它们的谓词在使输出更好的过程中不太通用,也不太有用。还有一些更清晰的替代方法,例如once/1可为您提供单个结果。专家非常小心地使用红点裁切-在某些情况下,它比逻辑方法要有效得多-但如果您可以使用纯粹的逻辑提法,则是更好的选择。通常,在使用cut时存在错误的谓词会出现“向后正确性”的问题,这些问题稍后会在您依赖于该谓词作为其他谓词的一部分时出现。这些可能很难调试和修复。

我不确定我会称他们为“罪孽”,但我大多同意初学者的教授。最好是如果您有逻辑上解决问题的经验,而又不使用割礼的话。然后,当您对易事和难事有了更好的了解时,便可以在以后进行介绍。过早使用它会使您依赖它作为过程编程的拐杖。

09-11 18:58