问题标签 [monoids]
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.
clojure - 如何在 Clojure 中编写 monoid 协议?
由于显而易见的原因,以下方法不起作用。
mzero具有零参数,并且协议中不允许(或没有意义)零参数方法。在 Haskell 或 Scala 中,调度是基于类型而不是基于值的,这不是问题。
Monoid在 Clojure中概念化和编写协议的正确方法是什么?
haskell - Haskell:重复函数(+)和(++),mappend
(+)并且(++)只是mappend; 我对吗?为什么需要它们?这是无用的重复,因为 Haskell 有这些强大的类型类和类型推断。假设我们为了视觉方便和打字增益而删除(+)和(++)重命名。mappend (+)对于初学者来说,编码会更直观、更短、更容易理解:
(这让我做梦。)。对于一个坚持抽象和诸如 Haskell 之类的东西的美丽语言来说,为同一事物提供三个甚至更多的函数并不是一件好事。我还看到了与monad相同的重复:与, , , , ,fmap是否相同或几乎相同... Haskell 委员会是否对此有所计划?它会破坏一些代码,但我听说,虽然我不确定,有一个即将到来的版本会有很大的变化,这是一个很好的机会。太可惜了……至少,叉子买得起吗?map(.)liftMmapMforMfmap
编辑
在我读到的答案中,有一个事实是,对于数字,要么适合,(*)要么(+)适合mappend. 事实上,我认为这(*)应该是的一部分Monoid!看:
目前,忘记功能mempty和mconcat,我们只有mappend.
但我们可以这样做:
它会(也许,我对此还不够了解)的行为如下:
实际上 'mmultiply' 只会根据 'mappend' 来定义,所以对于Monoid没有必要重新定义它的实例!然后Monoid更接近数学;也许我们也可以在课堂上添加(-)和(/)!如果这行得通,我认为它将解决SumandProduct以及函数重复的情况:mappend变得(+)和新mmultiply的只是(*). 基本上我建议用“上拉”重构代码。哦,我们还需要一个新mempty的 for (*)。我们可以将这些运算符抽象到一个类中MonoidOperator并定义Monoid如下:
好吧,我还不知道该怎么做,但我认为所有这些都有一个很酷的解决方案。
parsing - 单曲面解析——它是什么?
我刚刚从Edward Kmett的名为“Monoids 简介”的幻灯片中偶然发现了monoidal 解析一词。幻灯片始终使用 haskell。
现在,在搜索这个词时,我只发现很少提到它,而且最多的是同一作者。所以我认为这个术语可以在这里解释。
那么,monoidal 解析是不是很有趣又新颖呢?除了我链接的幻灯片之外,它是否出现在任何地方?最重要的是它是什么?幻灯片本身似乎没有给出定义,也没有过多强调它。
haskell - 模式匹配中的 Monoid mempty
我尝试编写一个maximum类似于Prelude. 我的第一个天真的方法是这样的:
maximum' :: (F.Foldable a, Ord b) => a b -> Maybe b
maximum' mempty = Nothing
maximum' xs = Just $ F.foldl1 max xs
但是,当我测试它时,Nothing无论输入如何,它都会返回:
> maximum' [1,2,3]
> Nothing
现在我想知道是否可以获取 Monoid 类型实例的空值。我写的一个测试函数可以正常工作:
getMempty :: (Monoid a) => a -> a
getMempty _ = mempty
> getMempty [1,2,3]
> []
我已经看过这两个问题,但我不知道答案如何解决我的问题:
Write a Maximum Monoid using Maybe in Haskell
Haskell Pattern Matching on the Empty Set
我将如何重写maximum'函数以使其工作?
haskell - 选择非空 Monoid
我需要一个选择非空幺半群的函数。对于列表,这将意味着以下行为:
现在,我实际上已经实现了它,但我想知道是否存在一些标准的替代方案,因为它似乎是一种常见的情况。不幸的是,Hoogle 没有帮助。
这是我的实现:
haskell - 大列表上单曲面折叠中的堆栈溢出
首先一些imports,
假设我有一个持有一对值的函子,
我有一个很大的清单,
我想计算一个,例如,一个平均值,
以下是一些可能的实现,
不幸的是,所有这些都会导致堆栈溢出。
认为问题可能是过度懒惰Foldable.foldMap,我尝试实施更严格的变体,
不幸的是,这也溢出了。
如何在不损害该方法的简洁结构的情况下实现这一目标?
更新
如果我将字段Fret设为严格,事情似乎会按预期工作。检查这是否适用于更大的应用程序。
haskell - 你如何在haskell中为这棵树实现monoid接口?
请原谅术语,我的心还在弯曲。
那个树:
我有几个问题:
如果
Ftree不可能Empty,它是否不再是 aMonoid,因为没有身份值。你将如何
mappend用这棵树实现?你能随便随便把两棵树嫁接在一起吗?对于二叉搜索树,您是否必须自省两棵树中的某些元素以确保其结果
mappend仍然是 BST?
为了记录,一些其他的东西Ftree可以在这里做:
haskell - 简单的例子来说明 Category、Monoid 和 Monad?
我对这三个概念感到非常困惑。
有没有简单的例子来说明 Category 、 Monoid 和 Monad 之间的区别?
如果有这些抽象概念的说明,那将非常有帮助。