JSB*_*ոգչ 9 recursion haskell list-comprehension
通过学习Haskell for Great Good,在关于高阶函数的章节中,作者将介绍几个不同库函数的实现.当filter'谈到(标准库函数的重新实现)的定义时filter,我认为显而易见的是:
filter' f xs = [x | x <- xs, f x]
Run Code Online (Sandbox Code Playgroud)
但是作者给出了以下更长的递归定义:
filter' _ [] = []
filter' p (x:xs)
| p x = x : filter' p xs
| otherwise = filter' p xs
Run Code Online (Sandbox Code Playgroud)
两个定义都做同样的事情.这有什么理由吗?递归定义在某种程度上更高效吗?对于Haskell来说,它更具惯用性吗?别的什么?
Ste*_*314 14
这可能是因为列表理解只是语法糖,原则上它被转换为递归形式.
如果作者的一点是要说明如何在功能实现,使用列表解析快捷方式并没有真正做到这一点 - 它显示了另一种方式来表达的解决方案,但不是一个真正的功能实现.
简而言之,它展示了如何从一组相当少的基本构建块实现.
不过这是一个猜测 - 我自己没有读过这个教程.