问题标签 [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 投票
1 回答
107 浏览

scala - 理解 ScalaZ 中的 FoldLeft

我正在阅读一些关于它的文章,ScalaZ并且有一个关于理解它的问题。在本文中,我们对 sum 函数进行了概括,以抽象出要求和的类型。

在哪里

trait Monoid[A] 定义如下:

是的,这很清楚。这里的 Monoid 对应于代数幺半群结构。现在在本文中,它对列表进行了抽象。为此,我们定义了以下特征:

所以现在我们可以定义 sum 函数如下:

我不是理论类别专家,但对我来说它看起来像 Applicative functor。那是对的吗?我们能否提供与范畴论的这种相似性。

0 投票
1 回答
287 浏览

scala - 具有部分功能的可折叠“foldMap”:foldCollect?

说,我有以下对象:

我需要的是获得一个Vector[String]包含所有与给定部分函数匹配的'c'的单曲。

例如:

我需要得到的是:Vector("test3-1","test3-2","test3-3","test4-1","test4-2","test4-3").

我通过以下方式解决了这个问题:

然而,这让我很好奇。我在这里所做的似乎是一件非常常见和自然的事情:对于可折叠集合的每个元素,尝试应用部分函数,​​如果失败,则默认为Monoid's emptyVector.empty在我的情况下)。我在库中搜索,我没有找到任何这样做的东西,所以我最终在我的代码中添加了这个扩展方法:

我的问题是:

有什么理由不提供这种方法吗?这不是一个通用且足够普遍的场景,还是我错过了什么?

0 投票
1 回答
121 浏览

haskell - 通用容器转换?如果从可折叠到替代?

对于instance Alternative [], (<|>) = (++). 所以我把(<|>)它当成某种拼接器,导致看似几乎万能的容器转换器:

事实上,我能够概括所有函数Data.List,这里有一些:

此外,这个类比产生了一些有趣的新实例,例如函子 sum ( Data.Functor.Sum) 的工作应用函子:

用这个类比概括所有函数并创建新实例实际上是个好主意,尤其是对于列表操作?

编辑:我特别担心返回类型不明确。对于普通的列表操作,返回类型可以从它的参数类型推导出来。但是“通用”版本不是,因为必须明确指定返回类型。这个问题严重到足以认为这个类比是危险的吗?(或者还有其他问题吗?)

编辑 2:如果我foldl'完全理解 的行为,universal 的时间复杂度splitAt(如上所示)必须是Θ(length xs)foldl'对于每个元素都是严格的,对吧?如果是,那一定是个问题,因为它不如普通版本的Θ(min n (length xs)).

0 投票
2 回答
209 浏览

haskell - 更改 Haskell 树中的索引

(抱歉,上下文描述很长,但我找不到更简单的方法来解释我的问题)考虑以下类型:

显然,Tree可以定义为Functor如下的实例:

我想定义一个函数,Tree通过排列 的索引来遍历 的实例Array UnitDir (Tree a)(因此它是 6 个可能值的排列UnitDir)。

一个可能的实现是这个:

我的问题如下:是否有一个自然的 Haskell 构造来“遍历”树,同时重新索引孩子?

Functor不起作用,因为我用它来更改树的内容,而不是它的索引方案。看来我需要两个实例Functor,一个用于更改内容,另一个用于更改数组索引。

我认为这Traversable将是正确的选择,但所提供函数的签名都不匹配applyPermutation.

提前感谢您的帮助。

0 投票
4 回答
311 浏览

haskell - 一般而言,可折叠函子是否有等效于头/尾的方法?

我想表达以下 Haskell 代码,仅使用函子代数(即 -依赖于任何特定的容器类型,例如List):

在我看来,应该有办法做到这一点,只依靠Foldable(或者,也许,Traversable),但我看不到它。

我在想:

  1. 可折叠/可遍历函子是否有后退的一般概念?
  2. 是否有一种公认的惯用方式,仅使用函子代数来移动可折叠/可遍历函子的内容?(请注意,上面的计算可能用英语描述为“从右侧移入一个值,并将落在左侧的值加回新的第一个值。”)
0 投票
1 回答
172 浏览

haskell - Haskell 为新数据类型创建 map 和 foldr 函数

我写了一个数据结构,

但我正在努力为他们创建地图和折叠功能。

到目前为止,我有这个:

关于如何实施它们的任何想法?也不确定我是否遗漏了任何东西,所以请让我知道是否也是这种情况。

0 投票
1 回答
96 浏览

haskell - 如何通过 foldMap 计算可折叠的浮点属性的最大值?

假设我有一张带有可测量对象的地图,我想要它们的最大宽度,默认为 0。Foldable( foldMap) 和Semigroup( Max) 的机制似乎很完美,只是我似乎无法引入任意下限。

这正确地抱怨了缺少的Bounded实例Double,因为使用的Monoid实例。Max amempty = minBound

我看到源Data.Foldable使用不同的定义newtype Max来实现maximum。该变体会很好,但它似乎没有被导出:

0 投票
2 回答
129 浏览

haskell - 如何在不使用 List 的情况下编写 reverseT?

我需要一个reverseT不使用的替代方案toList。显然,这段代码是不正确的,但展示了我所追求的想法:

有谁知道我可以用什么替换,以便在构建时length获得最后一个索引元素?tabulatef

0 投票
1 回答
147 浏览

widget - qml 中可折叠容器的小部件

我应该使用什么 qml 小部件来创建可折叠容器?我找不到它。

示例(来自 Qt Creator):

在此处输入图像描述

0 投票
2 回答
256 浏览

sorting - 有maximumWith这样的东西吗?

具体来说,我正在寻找一个函数'maximumWith',

其行为方式如下:

我的用例是选择列表中最长的单词。
为此,我想要类似于maximumWith length.

我认为这样的事情存在,因为sortWith等存在。