我刚开始学习prolog,想知道为什么它使用dfs而不是bfs,以及为什么没有简单的方法可以更改它。
ISO prolog是否要求这样做?
我刚开始学习prolog,想知道为什么它使用dfs而不是bfs,以及为什么没有简单的方法可以更改它。
ISO prolog是否要求这样做?
首先,它相当容易改变。大多数Prolog文本都解释了如何编写执行BFS的谓词以及如何创建可以使用任意术语执行BFS的元解释器。事实上,在大学里尝试Prolog的学生基本上只需要一两周就能掌握。虽然这不是一个基本的Prolog任务,但也不是一种高级的Prolog技术。如果你花两个月时间学习Prolog,这并不是什么令人畏惧的事情。听起来像是很多Prolog,但与(比如)Java相比,这真的不算什么。由于某种原因,我们希望能够更快地掌握Prolog,而对于实际上不那么有趣的系统,我们却不会这样期望。
我相信ISO规定的搜索策略被称为SLD Resolution,深度优先搜索源于此解析机制。我没有阅读ISO标准,所以也许有比我更了解的人会发表评论。如果解析方法(因此,深度优先或广度优先)不是强制性的,那么管理Prolog标准化将会很困难,因为以一种方式成功的计算可能会以另一种方式进入无限循环。一个不指定正常程序行为的语言标准将是一个相当糟糕的标准。尽管如此,完全可以内置一个用于指定替代搜索策略的方法。