问题标签 [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.
scala - 具有部分功能的可折叠“foldMap”:foldCollect?
说,我有以下对象:
我需要的是获得一个Vector[String]
包含所有与给定部分函数匹配的'c'的单曲。
例如:
我需要得到的是:Vector("test3-1","test3-2","test3-3","test4-1","test4-2","test4-3")
.
我通过以下方式解决了这个问题:
然而,这让我很好奇。我在这里所做的似乎是一件非常常见和自然的事情:对于可折叠集合的每个元素,尝试应用部分函数,如果失败,则默认为Monoid
's empty
(Vector.empty
在我的情况下)。我在库中搜索,我没有找到任何这样做的东西,所以我最终在我的代码中添加了这个扩展方法:
我的问题是:
有什么理由不提供这种方法吗?这不是一个通用且足够普遍的场景,还是我错过了什么?
haskell - 通用容器转换?如果从可折叠到替代?
对于instance Alternative []
, (<|>) = (++)
. 所以我把(<|>)
它当成某种拼接器,导致看似几乎万能的容器转换器:
事实上,我能够概括所有函数Data.List
,这里有一些:
此外,这个类比产生了一些有趣的新实例,例如函子 sum ( Data.Functor.Sum
) 的工作应用函子:
用这个类比概括所有函数并创建新实例实际上是个好主意,尤其是对于列表操作?
编辑:我特别担心返回类型不明确。对于普通的列表操作,返回类型可以从它的参数类型推导出来。但是“通用”版本不是,因为必须明确指定返回类型。这个问题严重到足以认为这个类比是危险的吗?(或者还有其他问题吗?)
编辑 2:如果我foldl'
完全理解 的行为,universal 的时间复杂度splitAt
(如上所示)必须是Θ(length xs)
,foldl'
对于每个元素都是严格的,对吧?如果是,那一定是个问题,因为它不如普通版本的Θ(min n (length xs))
.
haskell - 更改 Haskell 树中的索引
(抱歉,上下文描述很长,但我找不到更简单的方法来解释我的问题)考虑以下类型:
显然,Tree
可以定义为Functor
如下的实例:
我想定义一个函数,Tree
通过排列 的索引来遍历 的实例Array UnitDir (Tree a)
(因此它是 6 个可能值的排列UnitDir
)。
一个可能的实现是这个:
我的问题如下:是否有一个自然的 Haskell 构造来“遍历”树,同时重新索引孩子?
Functor
不起作用,因为我用它来更改树的内容,而不是它的索引方案。看来我需要两个实例Functor
,一个用于更改内容,另一个用于更改数组索引。
我认为这Traversable
将是正确的选择,但所提供函数的签名都不匹配applyPermutation
.
提前感谢您的帮助。
haskell - 一般而言,可折叠函子是否有等效于头/尾的方法?
我想表达以下 Haskell 代码,仅使用函子代数(即 -不依赖于任何特定的容器类型,例如List
):
在我看来,应该有办法做到这一点,只依靠Foldable
(或者,也许,Traversable
),但我看不到它。
我在想:
- 可折叠/可遍历函子是否有先和后退的一般概念?
- 是否有一种公认的惯用方式,仅使用函子代数来移动可折叠/可遍历函子的内容?(请注意,上面的计算可能用英语描述为“从右侧移入一个值,并将落在左侧的值加回新的第一个值。”)
haskell - Haskell 为新数据类型创建 map 和 foldr 函数
我写了一个数据结构,
但我正在努力为他们创建地图和折叠功能。
到目前为止,我有这个:
关于如何实施它们的任何想法?也不确定我是否遗漏了任何东西,所以请让我知道是否也是这种情况。
haskell - 如何通过 foldMap 计算可折叠的浮点属性的最大值?
假设我有一张带有可测量对象的地图,我想要它们的最大宽度,默认为 0。Foldable
( foldMap
) 和Semigroup
( Max
) 的机制似乎很完美,只是我似乎无法引入任意下限。
这正确地抱怨了缺少的Bounded
实例Double
,因为使用的Monoid
实例。Max a
mempty = minBound
我看到源Data.Foldable
使用不同的定义newtype Max
来实现maximum
。该变体会很好,但它似乎没有被导出:
haskell - 如何在不使用 List 的情况下编写 reverseT?
我需要一个reverseT
不使用的替代方案toList
。显然,这段代码是不正确的,但展示了我所追求的想法:
有谁知道我可以用什么替换,以便在构建时length
获得最后一个索引元素?tabulate
f
sorting - 有maximumWith这样的东西吗?
具体来说,我正在寻找一个函数'maximumWith',
其行为方式如下:
我的用例是选择列表中最长的单词。
为此,我想要类似于maximumWith length
.
我认为这样的事情存在,因为sortWith
等存在。