我是哈斯克尔的新手。我可以将列表范围作为一个函数吗?
我知道我可以使用元组运算符作为函数:(,) 1 2
。
我可以对列表范围..
做同样的事吗?如在[0..9]
中那样。或者它不是一个功能?
基本上我有两个值,我需要创建一个列表。显式lambda表达式的工作原理如下:\x y -> [x..y]
。我试图找出如何缩短它。
我是哈斯克尔的新手。我可以将列表范围作为一个函数吗?
我知道我可以使用元组运算符作为函数:(,) 1 2
。
我可以对列表范围..
做同样的事吗?如在[0..9]
中那样。或者它不是一个功能?
基本上我有两个值,我需要创建一个列表。显式lambda表达式的工作原理如下:\x y -> [x..y]
。我试图找出如何缩短它。
你不能用..
做到这一点,因为它是建立在语言,而不是一个功能的语法元素。但是,是功能与“(..)
”执行的功能相同,或者您的\x y -> [x..y]
执行的功能是:enumFromTo
。
其enumFromTo
:
Prelude> :t enumFromTo
enumFromTo :: Enum a => a -> a -> [a]
Prelude> enumFromTo 1 5
[1,2,3,4,5]
我相信'“(..)”'显式定义为'enumFromTo'。如果你创建了自己的'enumFromTo'函数,haskell会在你使用'[x..y]'的时候使用它。 – PyRulez
@PyRulez在标准的Haskell中,你不能定义你自己的独立'enumFromTo'并且以这种方式使用它。你必须为你的类型定义一个'Enum'类实例。 'RebindableSyntax'扩展允许重新定义例如'>> =',但似乎不适用于'enumFromTo'。 –
@ØrjanJohansen定义一个'Enum'实例时,你可以定义一个'enumFromTo'。 – PyRulez