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 的大作中提到】 : 有没有具体例子,讲讲看?
|
|
|
H**r 发帖数: 10015 | |
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中转晕。括号倒不是问题。
|
|
|
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 | |
|
|
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 : 这个比较全,我看了几遍了,还是搞不定。大牛看通了给科普下。
|