2
mifun s = foldr op 0 s
          where op x r = head x + r 

有没有办法让 ghci 告诉我?

4

2 回答 2

11

尝试:t mifun(缩写:type mifun

这使

*Main> :t mifun
mifun :: (Num b) => [[b]] -> b

因此,对于b的实例nummifun获取列表的列表b并输出单个b(在本例中是列表的第一个元素的总和)。

于 2010-04-04T22:32:16.677 回答
2

这不是一个真正的答案,但我需要格式化。

注意: mifun如果任何包含的列表为空,则为 ⊥。例如:

> mifun [[3], [5, 8], [], [1, 2, 3]]
*** Exception: Prelude.head: empty list

如果您希望上述示例的结果为 9(将空列表视为对总和没有贡献),则应将 op 定义为以下方式之一:

mifun s = foldr op 0 s
          where op []    r = r
                op (x:_) r = x + r 

mifun s = foldr op 0 s
          where op x r = (if null x then 0 else head x) + r 

mifun s = foldr op 0 s
          where op x r = sum (take 1 x) + r 

我可能更喜欢第一个。

于 2010-04-05T02:37:07.803 回答