在Haskell中搜索控件

rwa*_*ace 4 search haskell inference lazy-evaluation

假设您正在编写一个搜索指数大或无限空间的程序:游戏,定理证明,优化等,您无法搜索整个空间的任何内容,结果的质量在很大程度上取决于选择要搜索的部分在可用资源范围内

在一种急切的语言中,这在概念上很简单:语言允许您指定评估顺序,并使用它来控制首先评估搜索空间的哪些部分.(在实践中,它往往变得混乱和复杂,因为推理控件的代码布局与问题定义混合在一起,这是我对以懒惰语言执行此操作的方式感兴趣的原因之一.但它是概念上直截了当.)

在像Haskell这样的懒惰语言中,你无法这样做.我可以想到两种方法:

  1. 编写代码,这取决于您正在使用的当前版本的编译器恰好选择的评估顺序,以及您正在使用的优化标记,以便最终以正确的顺序发生.这似乎可能导致可维护性问题.

  2. 编写编写代码的代码,特别是编写将问题定义与一组启发式一起转换为急切语言的指令序列的代码,该代码指定应该完成事情的确切顺序.如果您愿意支付前期费用,这似乎是有价值的.

有没有其他推荐的方法来做这种事情?

ham*_*mar 5

在惰性语言中执行此操作的典型方法是将搜索空间定义为(可能是无限的)数据结构,然后编写您希望用于分别遍历此结构的任何策略.这样,您就可以控制所使用的策略,但它与问题定义保持独立.