问题标签 [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
(.)
liftM
mapM
forM
fmap
编辑
在我读到的答案中,有一个事实是,对于数字,要么适合,(*)
要么(+)
适合mappend
. 事实上,我认为这(*)
应该是的一部分Monoid
!看:
目前,忘记功能mempty
和mconcat
,我们只有mappend
.
但我们可以这样做:
它会(也许,我对此还不够了解)的行为如下:
实际上 'mmultiply' 只会根据 'mappend' 来定义,所以对于Monoid
没有必要重新定义它的实例!然后Monoid
更接近数学;也许我们也可以在课堂上添加(-)
和(/)
!如果这行得通,我认为它将解决Sum
andProduct
以及函数重复的情况: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 之间的区别?
如果有这些抽象概念的说明,那将非常有帮助。