这里
就是那本“书”了;
在线版的,周末看了1,2,3,4,5章,做个小记录吧,狠有意思;
这里准备记些个...那个...点,不是每点都记,也不需要每点都记,总体来讲haskell程序还是基于灰常一致的规则运行着的(binding & applying),我想记的只是一些内建函数的备忘、special form和一些syntax sugar,作为以后参考;
首先是list&tuple operation:
list:
==============
连接 | ++ |
cons operator | : |
逐个比较 | ><>=<== |
取值 | head,tail,last,init |
运算 | length,null,reverse,take,drop,maximum,minimum,sum,product,elem |
生成 | cycle,repeat,replicate,[outputFunc l set+,predicate*] |
?? | zip |
tuple:
==============
然后是type classes:
==============
感觉这个type class是haskell的核心概念所在,要注意的一点就是haskell是静态类型强类型的语言,type就是指类型,常见的类型有Int,Integer,Double,Char,Bool等等,如果非要跟java、c++等等面向对象语言做个比较的话,这个type就相当于面向对象语言中的class,表示某种类型的值;那么,type class是什么呢?其实type class是对众多types进行分类,把所有的type,按照特性,分成了一个个群组,这些群组就叫做classes..由于是type的群组,所以就叫做type classes了,不能把这个class和java中的class搞混...
好了,那么haskell内定了哪些type和type classes呢?记在这张强大的图上:
这个图可能会成为haskell编程中必不可少的手册...
从图上看得出来把各种type放到合适的type class中不是一件容易的事,需要小心翼翼并经过反复论证决定要建立哪些class,然后再小心翼翼并反复论证是否某个type该被放入某个class中...当然,haskell的设计者们都把这些事情做好了,据说是一群Dr.s~为啥说这事情不容易呢?举个例子:你知道图中为啥Ord不包含Num呢?数字难道是没有顺序的么?呵呵,其实数字还分实数和虚数...实数和虚数在一起是不能排出个顺序来的,所以如果光说“数字”并不代表有顺序;像Real就属于Ord了,因为同是实数的话是有顺序的,Real属于Num,是数字的一种...OK,这个内建type & classes需要在实际编程中去慢慢熟悉的;
Hmmm..这个type class的概念让你想到什么?集合概念中的文氏图?我是有点这种感觉...
然后是一些statement和非典型expression记要:
==============
if..then..else..
这是一个expression,为啥呢?因为else部分必不可少...所以haskell的if语句是必然evaluate出一个值的,所以就是expression而非statement了...那么,它就可以被用在任何可以填入expression的地方...比如挤在list comprehension里面...
pattern xs@(x:y:ys)
xs stands for x:y:ys
Guard:
方法签名
|boolExp = 方法定义
|...
|boolExp = 方法定义
|otherwise = 方法定义
where binding:
方法签名、定义
where xxx=...
这里如果xxx也是一个函数的话,那么xxx里面可以还有where结构,也就是说where结构是可以嵌套的;
where形式的binding是一个语法结构而非expression
let binding:
let a = 9 in a + 1
绑定多个值要换行对齐:
let sideArea = 2 * pi * r * h
topArea = pi * r ^2
in sideArea + 2 * topArea
若无法换行的情况,可用';'分割:
let a = 100; b = 200; c = 300 in a*b*c
let binding是一种expression
以上的where和let是两种除了传参之外的特殊绑定形式,其区别是where是语法结构(或者说statement)而let是一种expression
由于where binding是语法结构,而let-in是expression,where binding可以跨域多个guard而let-in会受限于它所在的scope中
最后是case expression:
case expression of pattern -> result
pattern -> result
pattern -> result
...
值得一提的是,函数定义的时候,如果使用pattern matching的定义形式,其实质上是case expression的一种语法糖...
=================================================================
OK,笔记写到这里,从题目能看出来还没写完,实际上这“书”我还没看完,看过剩下的部分再写吧...
另外,我发现F#跟haskell神似...
感觉是废话...那scala还可能神似呢...
囧rz...
分享到:
相关推荐
本教程针对的对象是具有命令式编程语言经验的人,但以前从未使用过功能语言进行编程。
本书是为那些具有命令式语言编程基础知识(例如C / C ++,Java,Python,Ruby等)并且可能会或可能不知道函数式编程(例如Haskell,Scala,Erlang)的人们学习Erlang的一种方法。 ,Clojure,OCaml等)。
《Learn You A Haskell For Great Good》是一本非常优秀的Haskell入门书籍,不仅覆盖了Haskell语言的基础知识,还介绍了其独特的高级特性。无论你是编程新手还是希望扩展技能树的经验开发者,都能从本书中获得有价值...
我的工作通过 Learn You a Haskell for Great Good! 完全的: 介绍 出发 类型和类型类 函数中的语法 递归 高阶函数 模块 制作我们自己的类型和类型类 输入和输出 函数式解决问题 函子、应用函子和幺半群 一大把...
《学习您的Haskell笔记本》是基于Jupyter Notebook的Haskell学习资源,改编自经典的Haskell教程《Learn You a Haskell for Great Good!》。这个项目旨在为Haskell初学者提供一个交互式的学习环境,通过Jupyter ...
#### 二、《Learn You a Haskell for Great Good!》书籍概述 这本书是一本面向初学者的Haskell教程,作者是Miran Lipovac。本书旨在帮助读者轻松地掌握Haskell语言的基础知识和高级特性,并通过实践项目加深理解。 ...
《Haskell语言教程》是一本深受开发者欢迎的在线书籍,主要目标是帮助初学者深入理解Haskell这门纯函数式编程语言。Haskell以其强大的理论基础、严格的类型系统和静态类型而著称,它鼓励程序员编写简洁、清晰且易于...
文档的标题“Learn_You_a_Haskell_for_Great_Good.pdf”和描述部分表明这本书是关于学习Haskell语言的入门指南。Haskell是一种高级的纯函数式编程语言,它具有强类型系统和惰性求值特性。它以其在编程语言理论领域的...
对 Haskell(for great good)的引用来自一本关于学习同名功能语言的好书,名为“Learn You a Haskell for Great Good!” 可以在上找到。 用 为您的操作系统安装和配置 Docker ( ) 通过发出docker info检查它...
[ " 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.