由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 想学FP最好不要从Scala开始
相关主题
Scala的map和flatmap什么区别?Generator其实就是monad
大牛给讲讲monad吧?大家有没有觉得Scala不如Haskell美?
Scala,F#或haskell怎么用DI?Haskell很难学。。
这次Scala没有入选有点意外呀Java 不是纯oo, oo 不是 imperative programming
haskell 真是逆天, 各种特殊符号都有特殊用途看来跳了Scala的坑是对的
scala和monad最近系统深入的学了haskell 困惑不少 收获不多
Haskell这种不作不死的典型Scala有一点不好
大牛对Scala的type system如何评价?clojure这语言真不错
相关话题的讨论汇总
话题: list话题: scala话题: def话题: trait话题: monad
进入Programming版参与讨论
1 (共1页)
p*****2
发帖数: 21240
1
这次学习monad又一次证明了。应该学个纯正一些的FP语言,然后再回头去用Scala。
Scala不管是OO还是FP,确实不适合初学者。
l******t
发帖数: 55733
2
No hesitation go for Haskell
N******K
发帖数: 10202
3
为啥要学FP

【在 p*****2 的大作中提到】
: 这次学习monad又一次证明了。应该学个纯正一些的FP语言,然后再回头去用Scala。
: Scala不管是OO还是FP,确实不适合初学者。

p*****2
发帖数: 21240
4

工作用

【在 N******K 的大作中提到】
: 为啥要学FP
p*****2
发帖数: 21240
5

工作用

【在 N******K 的大作中提到】
: 为啥要学FP
p*****2
发帖数: 21240
6

工作用

【在 N******K 的大作中提到】
: 为啥要学FP
w**z
发帖数: 8232
7
为啥一定要用fp?

【在 p*****2 的大作中提到】
:
: 工作用

p*****2
发帖数: 21240
8

好用

【在 w**z 的大作中提到】
: 为啥一定要用fp?
w**z
发帖数: 8232
9
有没有具体例子,讲讲看?

【在 p*****2 的大作中提到】
:
: 好用

p*****2
发帖数: 21240
10

concurrency, STM, async, event-driven

【在 w**z 的大作中提到】
: 有没有具体例子,讲讲看?
相关主题
scala和monadGenerator其实就是monad
Haskell这种不作不死的典型大家有没有觉得Scala不如Haskell美?
大牛对Scala的type system如何评价?Haskell很难学。。
进入Programming版参与讨论
H**r
发帖数: 10015
11
大神推荐啥子
C吗
p*****2
发帖数: 21240
12

C不是FP呀。我也不知道推荐啥。就是感觉Scala不太适合初学。Clojure要好很多。但
是我也没跟其他比较过。

【在 H**r 的大作中提到】
: 大神推荐啥子
: C吗

l*********s
发帖数: 5409
13
scala has free online course.
p*****2
发帖数: 21240
14

我觉得这个真的很推动scala的流行

【在 l*********s 的大作中提到】
: scala has free online course.
e*******o
发帖数: 4654
15

就冲这个也得学,Scala老大很有眼光 。

【在 p*****2 的大作中提到】
:
: 我觉得这个真的很推动scala的流行

p*****2
发帖数: 21240
16

reactive学的如何了?

【在 e*******o 的大作中提到】
:
: 就冲这个也得学,Scala老大很有眼光 。

e*******o
发帖数: 4654
17
听大牛的建议,今天下午花时间看了下 haskell 的 typeclass。
scala 还得些时间适应。

【在 p*****2 的大作中提到】
:
: reactive学的如何了?

f**********3
发帖数: 295
18
LISP很适合初学,MIT和Berkeley都用,但是真是纯FP的只有haskell。 SICP是本很好
对应的书,martin的scala课用的基本就是用scala讲一遍SICP

【在 p*****2 的大作中提到】
: 这次学习monad又一次证明了。应该学个纯正一些的FP语言,然后再回头去用Scala。
: Scala不管是OO还是FP,确实不适合初学者。

e*******o
发帖数: 4654
19
lisp 很容易在各种quote中转晕。括号倒不是问题。

【在 f**********3 的大作中提到】
: LISP很适合初学,MIT和Berkeley都用,但是真是纯FP的只有haskell。 SICP是本很好
: 对应的书,martin的scala课用的基本就是用scala讲一遍SICP

f**********3
发帖数: 295
20
quote是很精华的东西,很好的体现了代码和数据互相转换

【在 e*******o 的大作中提到】
: lisp 很容易在各种quote中转晕。括号倒不是问题。
相关主题
Java 不是纯oo, oo 不是 imperative programmingScala有一点不好
看来跳了Scala的坑是对的clojure这语言真不错
最近系统深入的学了haskell 困惑不少 收获不多scala很牛啊
进入Programming版参与讨论
e*******o
发帖数: 4654
21
这个倒是,不过一旦套的层数多了,不好看。
我觉得lisp流行不起来,这个是一个原因。不过没了这个,lisp就不是lisp了。

【在 f**********3 的大作中提到】
: quote是很精华的东西,很好的体现了代码和数据互相转换
p*****2
发帖数: 21240
22

quote用的很多吗?我怎么没感觉呀?是不是因为clojure里加了vector?

【在 e*******o 的大作中提到】
: 这个倒是,不过一旦套的层数多了,不好看。
: 我觉得lisp流行不起来,这个是一个原因。不过没了这个,lisp就不是lisp了。

l*****t
发帖数: 2019
23
我倒是ML, Haskell上手的。不过时间年不用全忘光了。还是Scala给,不容易忘。

【在 p*****2 的大作中提到】
: 这次学习monad又一次证明了。应该学个纯正一些的FP语言,然后再回头去用Scala。
: Scala不管是OO还是FP,确实不适合初学者。

l*****t
发帖数: 2019
24
没办法,学校老师逼得。

【在 N******K 的大作中提到】
: 为啥要学FP
p*****2
发帖数: 21240
25

大牛给讲讲Scala的monad吧。

【在 l*****t 的大作中提到】
: 我倒是ML, Haskell上手的。不过时间年不用全忘光了。还是Scala给,不容易忘。
c******o
发帖数: 1277
26
我这个周末又研究了一遍, scala设计的时候就没有做abstract monad trait, 也没
有打算做这个。
要是学纯fp,最好还是Haskell. Lisp (Clojure)也是个混合体。
p*****2
发帖数: 21240
27

大牛说的是。我也又研究了一下。Clojure理解Monad比Scala强,感觉能理解50%以上,
但是没法彻底。想彻底只能上Haskell了。Clojure更倾向于用Macro而不是Monad。

【在 c******o 的大作中提到】
: 我这个周末又研究了一遍, scala设计的时候就没有做abstract monad trait, 也没
: 有打算做这个。
: 要是学纯fp,最好还是Haskell. Lisp (Clojure)也是个混合体。

l*****t
发帖数: 2019
28
不懂,我懒,也不想翻书了

【在 p*****2 的大作中提到】
:
: 大牛说的是。我也又研究了一下。Clojure理解Monad比Scala强,感觉能理解50%以上,
: 但是没法彻底。想彻底只能上Haskell了。Clojure更倾向于用Macro而不是Monad。

e*******o
发帖数: 4654
29
vector 确实减少了quote,不过,容易晕的地方只要是macro。可能看多了就好了吧,
我看看,觉得尼玛,算了。就停在了晕的状态了。

【在 p*****2 的大作中提到】
:
: 大牛说的是。我也又研究了一下。Clojure理解Monad比Scala强,感觉能理解50%以上,
: 但是没法彻底。想彻底只能上Haskell了。Clojure更倾向于用Macro而不是Monad。

e*******o
发帖数: 4654
30
@peaking2 看过这个? http://www.haskell.org/haskellwiki/Typeclassopedia
这个比较全,我看了几遍了,还是搞不定。大牛看通了给科普下。
相关主题
推荐免费webinar for monads, in Java 8/Scala/Haskell大牛给讲讲monad吧?
scala for comprehension 不支持 letScala,F#或haskell怎么用DI?
Scala的map和flatmap什么区别?这次Scala没有入选有点意外呀
进入Programming版参与讨论
c******o
发帖数: 1277
31
这个我也看了好几遍,不如书(functional programming in scala) 好懂
我觉得一般来说
functor/monad 最重要
然后看看monoid/foldable (这个最容易)
applicative/traversable,这个我到现在还不是那么懂。。。
arrow/comonad我就完全不懂了。。。
我前一段做的笔记:
trait Semigroup[A] {
def append(x: A, y: A): A
}
List(1,2,3,4).append(List(5)) = List(1,2,3,4,5)
trait Functor[T[_]]{
def map[A,B](ta:T[A])(f:A=>B):T[B]
}
map(List(1,2,3,4))(x=> x.toString) = List("1", "2", "3", "4")
simplest transform, like a foreach in someway
trait Applicative[T[_]] extends Functor[T]{
def unit[A](a:A):T[A]
def ap[A,B](ta:T[A])(tf:T[A=>B]):T[B]
}
ap(Some(1))(Some(x => x.toString)) = Some("1") // function (x=> x.toString)
may not be obtainable
Applicative Functor is less powerful than Monad, but less constraints, so "
easier" (some system can compose if model as applicative functor, but can
not compose if modeled as monad) (?? example?)
also "ap" method essentially is equivalent to map2/map3/map4 etc....
def map3[A,B,C,D](fa: F[A],
fb: F[B],
fc: F[C])(f: (A, B, C) => D): F[D] =
apply(apply(apply(unit(f.curried))(fa))(fb))(fc)
trait Monad[M[_]] extends Applicative[M]{
def flatMap[A,B](ma:M[A])(f:A=>M[B]):M[B]
}
flatMap(Some(1))(x => Some(x.toString)) = Some("1")
essentially, you "lift" basic type A, into a container(context) M, and then
you can do composition (combination) in the context, until the end get the
basic type back again.
In this sense, hide the effect in the container, and use M[A], M[B] like
pure value.
A lot of useful combinators derived from flatMap/unit
def join[A](mma: M[M[A]]): M[A]
etc......
trait Monoid[A] {
def op(a1: A, a2: A): A
def zero: A
}
List("Hic", "Est", "Index").foldLeft(stringMonoid.zero)(stringMonoid.op) = "
HicEstIndex"
trait Foldable[F[_]] {
def fold[M: Monoid](t: F[M]): M
}
fold(List("Hic", "Est", "Index")) = "HicEstIndex" //implicit conversion,
string itself has already zero = "" and op = ++
Foldable use Monoid to go through a structure
trait Traversable[T[_]] extends Functor[T] {
def traverse[F[_] : Applicative, A, B](f: A => F[B], t: T[A]): F[T[B]]
}
//not the same as scala Traversable trait (different things)
//like foldable usable to use a applictive to traverse the Traversable (tree
for example),
Traversable keep the structure, and keep the trace from all the element,
compare to Foldable, which remove structure, and get only a final data.
For example, traverse a list of 3 element always get you a list of 3 element
, but not foldable.
So you can keep a output for each element for traverse
traverse is equivalent to
def sequence[F[_],A](fas: List[F[A]]): F[List[A]]
which is interesting, and monad can not do this.

【在 e*******o 的大作中提到】
: @peaking2 看过这个? http://www.haskell.org/haskellwiki/Typeclassopedia
: 这个比较全,我看了几遍了,还是搞不定。大牛看通了给科普下。

p*****2
发帖数: 21240
32

你用很多macro吗?我so far用的很少。

【在 e*******o 的大作中提到】
: vector 确实减少了quote,不过,容易晕的地方只要是macro。可能看多了就好了吧,
: 我看看,觉得尼玛,算了。就停在了晕的状态了。

p*****2
发帖数: 21240
33

我今天被scala的作业搞的很恶心。要休息了。

【在 e*******o 的大作中提到】
: @peaking2 看过这个? http://www.haskell.org/haskellwiki/Typeclassopedia
: 这个比较全,我看了几遍了,还是搞不定。大牛看通了给科普下。

1 (共1页)
进入Programming版参与讨论
相关主题
clojure这语言真不错haskell 真是逆天, 各种特殊符号都有特殊用途
scala很牛啊scala和monad
推荐免费webinar for monads, in Java 8/Scala/HaskellHaskell这种不作不死的典型
scala for comprehension 不支持 let大牛对Scala的type system如何评价?
Scala的map和flatmap什么区别?Generator其实就是monad
大牛给讲讲monad吧?大家有没有觉得Scala不如Haskell美?
Scala,F#或haskell怎么用DI?Haskell很难学。。
这次Scala没有入选有点意外呀Java 不是纯oo, oo 不是 imperative programming
相关话题的讨论汇总
话题: list话题: scala话题: def话题: trait话题: monad