当前位置: 首页 > 知识库问答 >
问题:

理解单子

澹台华采
2023-03-14

请帮助确认或纠正对什么是单子及其特征的理解。

在我的理解中,单子是:

    < li >可容纳任何T型和型的容器 < li >提供一个绑定接口,允许其客户端应用平面映射函数和 < li >将其内容投影到另一个任意T '类型的单子上。

需要有一个返回或单元接口来创建t类型的单子。

unit:= T -> M[T]

在Scala中,List()或Set()是返回接口的示例,任何Scala序列类型(Array、List、Map、String)都是Monad,它们提供了绑定的平面图接口

这些是正确的吗?

软件工程提供了管理复杂性或构建软件的方法,例如无需goto的结构化编程、UNIX管道到管道转换、面向对象以封装数据

Monad是否是一种设计模式,它提供了一种将计算构建为链的方法?

我认为UNIX命令(如cat、grep)是可以链接的函数,但这并不意味着它们是Monad,它们不是Monad,因为它们没有return/unit,也不是数据类型。或者它仍然被认为是,例如,在一元i/o和UNIX shell编程中的IO一元?

我相信Python中没有现成的bind或Scala flatMap等价物。我能说Python没有现成的单子特性吗?

  • 揭开斯卡拉的莫纳德的神秘面纱
  • 图片中的函子、应用和 Monads
  • 函数式编程和范畴论 [第 1 部分] - 范畴和函子
  • Monad (函数式编程)
  • 用简单的英语蒙纳德?(适用于没有FP背景的OOP程序员)

共有1个答案

尚宏硕
2023-03-14

>

  • 是的,你说得对。然而,值得注意的是,在抽象中,一个单子应该有两个附加方法,可以组合起来链接计算。请注意,flatMap只是这些方法的组合-flat和map。map可用于定义M[a]类型的计算-

    是的,在Scala中,它们是链接计算的一种手段。

    shell 脚本命令可以实现 monads 的目的(在所考虑的类比中),但仍然不能被视为 monad(至少在我看来),因为它们不一定符合第 1 点。

    是的,Python中不支持开箱即用的单子。人们只能依靠嵌套循环。

  •  类似资料:
    • 问题内容: 我有一个列表,我只想在满足特定条件的条目上使用特定功能-保留其他条目不变。 例如:假设我只想将偶数个元素乘以2。 想要的结果: 但是产量(它还充当过滤器)。 正确的解决方法是什么? 问题答案: 使用条件表达式: (数学怪人的注:您也可以使用 但无论如何我还是更喜欢第一种选择;)

    • 本文向大家介绍Haskell基本清单理解,包括了Haskell基本清单理解的使用技巧和注意事项,需要的朋友参考一下 示例 Haskell具有列表理解,这很像数学中的集合理解,以及类似命令式语言(如Python和JavaScript)的类似实现。最基本的列表理解采用以下形式。 例如 函数也可以直接应用于x: 这等效于: 例:            

    • 问题内容: 我们可以在列表理解中使用吗? 范例: 我们可以采用与上述代码类似的方式将列表理解包括在内吗? 例如,答案如下: 到现在为止,我仅使用和理解列表。 问题答案: Python的条件表达式正是针对这种用例而设计的:

    • 本文向大家介绍简单理解vue中Props属性,包括了简单理解vue中Props属性的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家解析了vue中Props的属性,供大家参考,具体内容如下 使用 Props 传递数据 组件实例的作用域是孤立的。这意味着不能并且不应该在子组件的模板内直接引用父组件的数据。可以使用 props 把数据传给子组件。 “prop” 是组件数据的一个字段,期望从父组件

    • 本文向大家介绍深入理解Vue 单向数据流的原理,包括了深入理解Vue 单向数据流的原理的使用技巧和注意事项,需要的朋友参考一下 单向数据流是什么 单向数据流指只能从一个方向来修改状态。下图是单向数据流的极简示意: 单向数据流的极简示意 与单向数据流对对应的是双向数据流(也叫双向绑定)。在双向数据流中,Model(可以理解为状态的集合) 中可以修改自己或其他Model的状态, 用户的操作(如在输入框

    • 问题内容: 更多有关python列表理解语法的信息。我有一个列表推导,它产生给定范围的奇数列表: 这构成了一个过滤器-我有一个源列表,其中删除了偶数()。我想在这里使用if-then-else之类的东西。以下代码失败: 有一个类似if-else的python表达式: 如何在列表理解中使用它? 问题答案: 是您要为每个元素返回的表达式的语法。因此,您需要: 混淆是由于您在第一个示例中使用 过滤器 而