看了5、6两章,笔记在这里~
首先是currying:
值得一提的是——接受两个参数的前缀函数如果先传入第二个参数...
let elemOf123 = (`elem` [1,2,3])
内置函数:
flip,map,filter,takeWhile,foldl,foldr,foldl1,foldr1,scanl,scanr,scanl1,scanr1
lambdas are expressions——它创造出一个值——匿名函数
优先使用现有内置函数,利用currying进行partial application构造需要的函数而非轻易使用lambda(或者使用函数复合制造需要的函数),总之,在需要一个非内置函数的时候,尽量走create on the fly的门路而非lambda
folds有点像reduce
$是方法应用的另一种形式,但具有最低运算优先级,且是右结合的
$除了可以用来省略一些括号之外,其本身也是一个function,感觉这一点具有重要意义,这极大地统一了haskell程序运行的规律:
map ($ 3) [(4+), (10*), (^2), sqrt]
函数组合其实就是高中、大学里学的
复合函数
函数想要复合,条件当然是“牛头要对马嘴”了...
如果想要把一个嵌套了很多层括号的式子转变成函数复合的写法,只需将最“里面”的那个函数的最后一个参数用'$'格在右边,其它部分按照一层嵌套一个'.'符的形式改写,比如有:
replicate 100 (product (map (*3) (zipWith max [1,2,3,4,5] [4,5,6,7,8])))
可以改写为:
replicate 100 . product . map (*3) . zipWith max [1,2,3,4,5] $ [4,5,6,7,8]
函数复合有助于写出"pointless"风格的函数定义,比如:
fn x = ceiling (negate (tan (cos (max 50 x))))
可以写成:
fn = ceiling . negate . tan . cos . max 50
也就是说,变成函数复合的写法后,由于currying,两边的'x'“约掉了”...
============================
...还有一个问题需要想想:说到currying,怎样才能对一个接受3个参数的函数首先传入它的第三个参数呢?如果说haskell的函数和数学函数类似的话,数学函数先代入第三个参数也是很合理的事情,不知道haskell里面该怎么写...
(我写了一种嵌套使用'`'符号的方式结果报语法错误...)
分享到:
相关推荐
haskell趣学指南。haskell的入门书,十分适合初学者。
本教程针对的对象是具有命令式编程语言经验的人,但以前从未使用过功能语言进行编程。
Learn You A Haskell For Great Good Mar 2011.pdf
本书是为那些具有命令式语言编程基础知识(例如C / C ++,Java,Python,Ruby等)并且可能会或可能不知道函数式编程(例如Haskell,Scala,Erlang)的人们学习Erlang的一种方法。 ,Clojure,OCaml等)。
我的工作通过 Learn You a Haskell for Great Good! 完全的: 介绍 出发 类型和类型类 函数中的语法 递归 高阶函数 模块 制作我们自己的类型和类型类 输入和输出 函数式解决问题 函子、应用函子和幺半群 一大把...
学习您的haskell笔记本:Jupyter改编的《 Learn a Haskell for Great Good!
Haskell是一种纯函数式编程语言,它的命名源自美国数学家Haskell Brooks Curry,他在数学逻辑方面上的工作使得函数式编程语言有了广泛的基础。Haskell语言是1990年在编程语言Miranda的基础上标准化的,并且以λ演算...
了解haskell的最简单明了的教程,图文并茂,不过是英文的,大家斟酌好再下。
Learn_You_a_Haskell_for_Great_Good.pdf 英文版
learn you a haskell for great good haskell 入门书籍
[ " Learn You a Haskell for Great Good! " , " Programming in Haskell " , " Real World Haskell " ] > lengthOf ?? doc $ root . named " books " ... named " book " 7 > doc ^? root . named " books " ... ...
Haskell 学习资料,Learn you a Haskell.