由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - Learn monad in 10 minutes
相关主题
大牛给讲讲monad吧?这次Scala没有入选有点意外呀
monad就是一chaining pattern看来跳了Scala的坑是对的
aop实际上是monadhaskell 真是逆天, 各种特殊符号都有特殊用途
我对为什么使用FP的理解 (补)scala和monad
看了一下monad,让我想到了Java的AOPScala的map和flatmap什么区别?
Haskell很难学。。请教一个boost::bind的问题
Java 不是纯oo, oo 不是 imperative programming呼唤大侠们,我实在不能实现C++泛型的精神。
想学FP最好不要从Scala开始c的函数指针能不能弄得像matlab的function handle一样?
相关话题的讨论汇总
话题: monad话题: functor话题: fmap话题: learn话题: minutes
进入Programming版参与讨论
1 (共1页)
c******o
发帖数: 1277
w***g
发帖数: 5958
2
学完这个再回来看看顺序-选择-循环三种基本结构,不知道能不能悟了。

【在 c******o 的大作中提到】
: http://adit.io/posts/2013-04-17-functors,_applicatives,_and_mon
: 附送:learn Lock/Actor/STM in 10 minutes
: http://adit.io/posts/2013-05-15-Locks,-Actors,-And-STM-In-Pictu

a*****e
发帖数: 1700
3
我是不建议看这套图,比较误导。我建议看 Ed Yang 的图学习 Monad :
http://blog.ezyang.com/2010/07/flipping-arrows-in-coburger-king

【在 c******o 的大作中提到】
: http://adit.io/posts/2013-04-17-functors,_applicatives,_and_mon
: 附送:learn Lock/Actor/STM in 10 minutes
: http://adit.io/posts/2013-05-15-Locks,-Actors,-And-STM-In-Pictu

c******o
发帖数: 1277
4
学习monad的严谨数学定义是最好的,但是monad的意义真不是这个,对developer没啥
用处。每个人对monad 的理解其实都不是一模一样。
我以前都学过,最后brown bag 还是选的通俗易懂,有意思的讲。

【在 a*****e 的大作中提到】
: 我是不建议看这套图,比较误导。我建议看 Ed Yang 的图学习 Monad :
: http://blog.ezyang.com/2010/07/flipping-arrows-in-coburger-king

p*****2
发帖数: 21240
5
大牛说说怎么误导了?我看了感觉不错。

【在 a*****e 的大作中提到】
: 我是不建议看这套图,比较误导。我建议看 Ed Yang 的图学习 Monad :
: http://blog.ezyang.com/2010/07/flipping-arrows-in-coburger-king

c******o
发帖数: 1277
6
再看看这个
http://www.slideshare.net/hangzhao54/fp-in-scala-with-adts?qid=
比较实际的code解释到底是怎么用

【在 p*****2 的大作中提到】
: 大牛说说怎么误导了?我看了感觉不错。
a*****e
发帖数: 1700
7
我举个例子吧。文中那个关于 list functor 的图,粗暴地把 fmap (+2) 解释为把列
表里面每个元素加二,是不对的。满足 functor 的条件仅仅是:
fmap id = id
fmap (f . g) = fmap f . fmap g
所以针对列表,我完全可以定义如下的 fmap 实现:
fmap f l = l
满足 functor 的定律吧?不能够被那个图解释吧?你可以说我这个例子太极端,not
interesting,但我要说的是,用具象的例子来理解抽象的概念,会限制你的思考。
文中这些图示最大的的错误在于,会让人以为可以往一个盒子(比如一个属于类型 M a
的值)里放进去一个属于类型 a 的值。这是大错特错。
比如 Cont r a = (a -> r) -> a 这个定义,对于任意一个类型 r,类型 Cont r 都可
以是一个 monad (因为可以定义与之相关的 return 和 bind 操作满足 monad laws)
。那么你看看在这个具体的数据类型的盒子(Cont r)里面,又在哪里装着一个 a 类型
的值?完全没有!
而且对新手学习 monad,我的建议是从 return/fmap/join 入手,而不是 return/bind
。因为 bind 有着强烈的 sequencing 的暗示,而 join :: M (M a) -> M a 则没有。
没错,sequencing 可以用 monad 来实现,但是要是理解 monad 总是关于 sequencing
则是大错特错了。

【在 p*****2 的大作中提到】
: 大牛说说怎么误导了?我看了感觉不错。
l******t
发帖数: 55733
8
你这个functor不是list这种type的functor。而是list实现了另外一个functor type

a

【在 a*****e 的大作中提到】
: 我举个例子吧。文中那个关于 list functor 的图,粗暴地把 fmap (+2) 解释为把列
: 表里面每个元素加二,是不对的。满足 functor 的条件仅仅是:
: fmap id = id
: fmap (f . g) = fmap f . fmap g
: 所以针对列表,我完全可以定义如下的 fmap 实现:
: fmap f l = l
: 满足 functor 的定律吧?不能够被那个图解释吧?你可以说我这个例子太极端,not
: interesting,但我要说的是,用具象的例子来理解抽象的概念,会限制你的思考。
: 文中这些图示最大的的错误在于,会让人以为可以往一个盒子(比如一个属于类型 M a
: 的值)里放进去一个属于类型 a 的值。这是大错特错。

H****S
发帖数: 1359
9
很有用,多谢。个人推荐Learning ScalaZ
http://eed3si9n.com/learning-scalaz/,这个和fp in scala 那本书对照着看很有启发。
p*****2
发帖数: 21240
10

http://eed3si9n.com/learning-scalaz/,这个和fp in scala 那本书对照着看很有启发。
我怎么感觉学haskell效果更佳呢?

【在 H****S 的大作中提到】
: 很有用,多谢。个人推荐Learning ScalaZ
: :http://eed3si9n.com/learning-scalaz/,这个和fp in scala 那本书对照着看很有启发。

相关主题
Haskell很难学。。这次Scala没有入选有点意外呀
Java 不是纯oo, oo 不是 imperative programming看来跳了Scala的坑是对的
想学FP最好不要从Scala开始haskell 真是逆天, 各种特殊符号都有特殊用途
进入Programming版参与讨论
a*****e
发帖数: 1700
11
我给的实现完全满足 functor 的要求,所以你必须承认它也是一种 list 的 functor
实现。至于为什么大家都用另外一种实现,是因为另外一种用处更多而已。
但要真正理解 functor 或者任何其它 category theory 的概念,必须要跳出
implementation 的框框。因为 category theory was invented for exactly the
opposite reason, i.e., you can talk about the properties of things by just
how they behave, without having to know their implementations. 这也是为什么
category theory 要比 set theory 强大的地方。

【在 l******t 的大作中提到】
: 你这个functor不是list这种type的functor。而是list实现了另外一个functor type
:
: a

c******o
发帖数: 1277
12
你说的都对,但是我不觉得是好的学习方法。
你的这个应该是对FP感兴趣后的第二步。
对于一个在industry的software engineer来说,最重要的不是严谨的定义和数学,最
重要的是能用它来干什么。engineer不是scientist.
List的map都是那么遍历的实现是有道理的,应为它有用,其实做FP的人问他们functor
/monad的properties, 没几个人开始的时候真正知道,但是不妨碍他们用。

functor


【在 a*****e 的大作中提到】
: 我给的实现完全满足 functor 的要求,所以你必须承认它也是一种 list 的 functor
: 实现。至于为什么大家都用另外一种实现,是因为另外一种用处更多而已。
: 但要真正理解 functor 或者任何其它 category theory 的概念,必须要跳出
: implementation 的框框。因为 category theory was invented for exactly the
: opposite reason, i.e., you can talk about the properties of things by just
: how they behave, without having to know their implementations. 这也是为什么
: category theory 要比 set theory 强大的地方。

a*****e
发帖数: 1700
13
我觉得吧,你还是要对咱们普罗大众的 engineer 有信心,相信他们的抽象思考的能力。
是有这样的人,刚接触陌生的概念时,第一反应不是去打破砂锅问到底,而是首先考虑
对自己是否“有用”,如果一旦打入“无用”这类,就产生反感抵触情绪。其实有用无
用这种结论,是随着时间随着实践随着环境随着阅历变化的。

functor

【在 c******o 的大作中提到】
: 你说的都对,但是我不觉得是好的学习方法。
: 你的这个应该是对FP感兴趣后的第二步。
: 对于一个在industry的software engineer来说,最重要的不是严谨的定义和数学,最
: 重要的是能用它来干什么。engineer不是scientist.
: List的map都是那么遍历的实现是有道理的,应为它有用,其实做FP的人问他们functor
: /monad的properties, 没几个人开始的时候真正知道,但是不妨碍他们用。
:
: functor
: 么

q*c
发帖数: 9453
14
有用没有取决于能不能挣钱,这个是不随时间实践环境变化的。
一个破计算机语言,混饭吃的而已,唯一的用处就是挣钱。要真的有用,该行去做物理
学家那是对人类世界最意义的,呵呵。

力。

【在 a*****e 的大作中提到】
: 我觉得吧,你还是要对咱们普罗大众的 engineer 有信心,相信他们的抽象思考的能力。
: 是有这样的人,刚接触陌生的概念时,第一反应不是去打破砂锅问到底,而是首先考虑
: 对自己是否“有用”,如果一旦打入“无用”这类,就产生反感抵触情绪。其实有用无
: 用这种结论,是随着时间随着实践随着环境随着阅历变化的。
:
: functor

a*****e
发帖数: 1700
15
一种技能是否可以挣来钱显然是变化的

【在 q*c 的大作中提到】
: 有用没有取决于能不能挣钱,这个是不随时间实践环境变化的。
: 一个破计算机语言,混饭吃的而已,唯一的用处就是挣钱。要真的有用,该行去做物理
: 学家那是对人类世界最意义的,呵呵。
:
: 力。

g*********e
发帖数: 14401
16
franky, I cannot read this in 10min.
maybe 30, or 1 hr.
H****S
发帖数: 1359
17
其实只要有对type constructor有概念上的感知,基本花个5分钟浏览一遍就可以了。
这个真的只是皮毛,深入下去还是要学习各种具体的monad实现。List,Option这些有
一个“容器”的直观感受,所以理解起来容易。看看这个用State monad实现的stack操
作(copied from http://eed3si9n.com/learning-scalaz
def stackManip: State[Stack, Int] = for {
_ <- push(3)
a <- pop
b <- pop
} yield(b)
这个chained monad本身也是一个function,代表对于给定__任意__一个stack,做一次
进栈(3),和两次出栈操作。换句话说这代表的是对一个过程的描述,不需要任何具
体的输入。最后返回的State monad包含stack本身(操作后)以及最后一次出栈的数。

【在 g*********e 的大作中提到】
: franky, I cannot read this in 10min.
: maybe 30, or 1 hr.

1 (共1页)
进入Programming版参与讨论
相关主题
c的函数指针能不能弄得像matlab的function handle一样?看了一下monad,让我想到了Java的AOP
clojure这语言真不错Haskell很难学。。
STM到底解决了什么问题?Java 不是纯oo, oo 不是 imperative programming
Really good illustrations about abstract concept related to FP想学FP最好不要从Scala开始
大牛给讲讲monad吧?这次Scala没有入选有点意外呀
monad就是一chaining pattern看来跳了Scala的坑是对的
aop实际上是monadhaskell 真是逆天, 各种特殊符号都有特殊用途
我对为什么使用FP的理解 (补)scala和monad
相关话题的讨论汇总
话题: monad话题: functor话题: fmap话题: learn话题: minutes