2015-07-10 137 views
2

我是哈斯克尔的新手。我可以将列表范围作为一个函数吗?

我知道我可以使用元组运算符作为函数:(,) 1 2

我可以对列表范围..做同样的事吗?如在[0..9]中那样。或者它不是一个功能?

基本上我有两个值,我需要创建一个列表。显式lambda表达式的工作原理如下:\x y -> [x..y]。我试图找出如何缩短它。

回答

6

你不能用..做到这一点,因为它是建立在语言,而不是一个功能的语法元素。但是,功能与“(..)”执行的功能相同,或者您的\x y -> [x..y]执行的功能是:enumFromTo

+4

我相信'“(..)”'显式定义为'enumFromTo'。如果你创建了自己的'enumFromTo'函数,haskell会在你使用'[x..y]'的时候使用它。 – PyRulez

+0

@PyRulez在标准的Haskell中,你不能定义你自己的独立'enumFromTo'并且以这种方式使用它。你必须为你的类型定义一个'Enum'类实例。 'RebindableSyntax'扩展允许重新定义例如'>> =',但似乎不适用于'enumFromTo'。 –

+0

@ØrjanJohansen定义一个'Enum'实例时,你可以定义一个'enumFromTo'。 – PyRulez

5

enumFromTo

Prelude> :t enumFromTo 
enumFromTo :: Enum a => a -> a -> [a] 
Prelude> enumFromTo 1 5 
[1,2,3,4,5] 
相关问题