Haskell:这个函数的类型是什么?

发布于 2024-08-27 11:28:38 字数 109 浏览 6 评论 0原文

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

有没有办法让 ghci 告诉我?

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

Is there a way to make ghci tell me?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

孤檠 2024-09-03 11:28:38

尝试 :t mifun:type mifun 的缩写),

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

为 So 提供了 b 的一个 num 实例, mifun 获取 b 的列表并输出单个 b (在本例中是列表的第一个元素的总和)。

try :t mifun (short for :type mifun)

which gives

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

So, for a b an instance of num, mifun takes a list of lists of b and outputs a single b (which in this case is the sum of the first elements of the lists).

初心未许 2024-09-03 11:28:38

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

注意: 如果包含的任何列表为空,则 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 

我可能更喜欢第一种。

This isn't really an answer, but I needed the formatting.

N.B.: mifun is ⊥ if any of the contained lists is empty. For example:

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

If you want the result of the above example to be 9 (treating an empty list as not contributing to the sum), then you should define op as one of the following ways:

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 

I'd probably prefer the first.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文