跳到主要内容

特纳·伯德·埃拉托斯特尼:永恒的燃烧之线

杰里米·吉本斯

摘要

函数式程序员有很多事情要感谢已故的David Turner:他在过去50年里用自己的语言SASL、KRC和Miranda所做的设计决策现在仍然具有影响力和启发性。

他在SASL中推广的一个示例程序是一个单行递归“筛子”,用于生成素数的无限列表,以说明懒惰求值和列表理解。特纳将此算法称为埃拉托斯特尼筛。梅丽莎·奥尼尔(Melissa O'Neill)在一篇名为《埃拉托斯特内斯的真实筛子》(The Truuine Sieve of Eratostenes)的可爱论文(JFP,2009)中指出,特纳的算法实际上并不是算法的忠实实现,并使用真实对象的优先级队列进行了详细的演示。她加入了理查德·伯德(Richard Bird)的一个变体,该变体仅使用列表,但巧妙地使用了循环编程。Bird在他的教科书“用Haskell进行功能性思考”中再次描述了他的循环程序,并将其正确性证明作为练习。不幸的是,他暗示的解决方案是错误的。那么,证据应该是什么样的呢?

特纳最后从事的项目之一是“全功能编程”的概念。他观察到,大多数程序在结构上已经是递归或共递归的,因此可以分别保证终止或生产,并推测“随着更多的实践,我们会发现这总是正确的”。尽管这一愿景很有说服力,但似乎我们离实现它还有一段路要走。我们探索埃拉托斯特尼的鸟形圆筛作为特纳的全功能编程的一个挑战性问题。

日记账
函数编程杂志
月份
八月
注释
提交中
年份
2024
视频