我试图解决一个问题,需要通过函数映射后的列表的最大值。该列表是从a到b的范围,其中a> b或b> a。因为Haskell也可以定义递减列表,我认为我不需要检查a> b并且不需要将界限翻转到b..a。该功能看起来有点像这样:为什么[1..n]在Haskell中的处理方式与[n..1]不同?
f a b = maximum . map aFunction $ [a..b]
但如果列表递减,即A> B,然后哈斯克尔给我一个例外:
Prelude.maximum: empty list
所以出于某种原因减少列表的双手在一个空列表到最大的功能。这是为什么?
我知道maximum
以foldl1 max
来定义和foldl1
需要一个非空列表,但我不知道为什么当交给一个foldl1
像[10..1]
列表是空的。
不管你用它做什么'[10..1]'都是空的(即使你不把它交给'foldl1')。这就是范围的定义。 –
[Haskell,range downto without step]可能重复(http://stackoverflow.com/questions/6972599/haskell-range-downto-without-step)。 –
http://stackoverflow.com/questions/6806455/haskell-list-range-question可能的重复以及 – hvr