如何使用列表理解来实现 take
?
到目前为止我的方法:
take2 :: (Num i, Ord i) => i -> [a] -> [a]
take2 n xs = [x | x <- xs, [x..n]]
最佳答案
列表推导式不太适合 take
函数的根本原因是:
take
函数在 n
个元素之后停止对参数列表的求值。
但列表推导式始终评估生成器中列表的所有元素。 Haskell 中没有break 语句。
<小时/>您可以在列表理解中使用列表之前或之后使用一些技巧来截断列表,但这样做没有真正的意义。这类似于首先使用普通的 take
来截断列表,然后使用列表理解来返回结果。
关于haskell - 使用列表理解实现 take 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49110195/