问题标签 [foldable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
327 浏览

haskell - 为什么 sum == foldl1 (+) 不是?

我总结了一个矩阵列表,foldl1 (+)因为我注意到它sum实际上将左上角元素的总和作为 1x1 矩阵返回。

这对我来说是出乎意料的,LYAH 建议sum = foldl1 (+)¹ 甚至 hlint 建议我使用sum而不是foldl1 (+)as is 'removes error on []'(附带问题:我如何优雅且[]安全地总结矩阵?)

为什么是sum /= foldl1 (+)矩阵,为什么通常不总是sum == foldl1 (+)

或者,排除空列表的情况:

为什么不是sum == foldl neutralElement (+)?或具体sum == foldl (+) (zero 2 2)[identity 2, identity 2]

自己的工作:

来源sum是:

的实例化Matrix是:

¹ 在添加整数的情况下

0 投票
3 回答
228 浏览

haskell - 在这种情况下如何使用 mapM_

我正在尝试在不同的行上打印自相关结果的不同分量:

输出是:

但是,如果我取消注释最后一行,我会收到错误消息:

如何在单独的行上打印结果的所有部分?谢谢你的帮助。

0 投票
2 回答
822 浏览

haskell - foldMap :: (Monoid m) => (a -> m) -> fa -> m 类型是什么意思以及如何实现它?

有人可以解释类型的含义以及如何实现吗?

基于https://hackage.haskell.org/package/base-4.9.1.0/docs/Data-Foldable.html#v:foldMap,他们将其解释为“将结构的每个元素映射到一个幺半群,并结合结果。” 但我不太明白这是什么意思。如何将元素映射到 Monoid 的结构?

我试过 foldMap f = mconcat . (<$>) f 了,但我得到了这个错误:

我尝试了@WillemVanOnsem 的代码并得到了这个错误:

0 投票
2 回答
580 浏览

haskell - 为什么在 Haskell 中最大值 (8,1) = 1?

我刚刚开始学习 Haskell。据我所知maximum,给出了整数列表的最大值。所以,maximum [2,5,7,1]给出 7。但是为什么通过给出一个元组输入,最大值总是给出第二个元素?例如,maximum (8,1)给出 1。同样的事情发生在sum (8,1), product (5,2), minimum (4,5)... 都给出元组的第二个元素。那么,任何人都可以向初学者解释为什么会发生这种情况吗?

0 投票
2 回答
79 浏览

haskell - 由于类型错误,无法实现可折叠实例

我正在学习haskell并尝试制作一个漂亮的打印程序。在某些时候,我想获得一行的长度(即该行中的列数)。为了能够在我的数据类型上做到这一点,我知道我必须实现可折叠的,它依赖于 Monoid。

以前我的行只是列表的类型别名,但为了学习,我想采取这一行动

但我收到以下编译器错误(在 ghci 8.0.2 上)

现在我不熟悉数据类型的类型。我希望这只是简单地遵循 Row 的 List 类型的唯一属性

0 投票
0 回答
89 浏览

haskell - 过滤第一个匹配的单子动作(不评估所有动作)?

我正在编写的以下函数是否有标准/优化的实现(可能是不必要的):

示例用法:

0 投票
1 回答
364 浏览

haskell - 为什么 mconcat 需要一个列表而不是一个可折叠的?

在查看的定义时,Monoid我注意到mconcat具有以下定义(source):

为什么签名会将其限制为[a]而不是像这样更通用Foldable

这是出于历史原因吗?或者这种更通用的实现是否会使特定类型更难提供它的优化版本,例如[]使用列表理解(source)的情况?

0 投票
3 回答
167 浏览

haskell - Foldable 类型类是否有限制如何派生可折叠实例的法律?

我正在尝试使用FoldableHaskell 中的类型类,使用以下数据类型作为示例:

如果我使用DeriveFoldableGHC 扩展,它似乎会派生一个Foldable实例

即,树的中序遍历。但是,我没有看到任何明显的阻止不同Foldable实例的东西,例如前序遍历:

是否存在Foldable使前序遍历实例非法的类型类的法律?

0 投票
1 回答
84 浏览

haskell - foldMap 连体

我正在尝试使用给定的原型在 Haskell 中创建此函数:

f <> g 行是我的部分代码的开始。使用该行,该函数通过了关联性测试,但没有产生正确的结果

0 投票
1 回答
243 浏览

haskell - 使用 Foldmap“超出范围”的 Haskell 制表函数

我正在尝试为“制表”编写一个定义,该函数生成给定 Map 中与给定可折叠集合中的键相对应的值的幺半群摘要。

这是我的代码:

我收到此错误:

除了第二行括号中的内容外,请不要更改任何内容

更新:我想我更接近于理解这一点。这是我的新代码。我意识到它是不完整的,但它至少可以编译。

现在它没有通过阴谋集团测试:

不管我做什么似乎都有一些变化

我假设如果 tabulate 的第三个参数不是空的,我需要的是某种条件?