250 likes | 610 Views
深入浅出 Haskell. 第 0 讲. 提纲. 课程计划表 开发平台与环境 Haskell 编程的基本概念与原理. GHC 高性能的编译器 GHCi 交互式解释器 runghc 把 Haskell 当脚本来运行 cabal 程序包的大管家 各种各样的常用库. Haskell Platform. GHCi R ead E valuation P rint L oop. 动手吧.
E N D
深入浅出Haskell 第0讲
提纲 • 课程计划表 • 开发平台与环境 • Haskell编程的基本概念与原理
GHC • 高性能的编译器 • GHCi • 交互式解释器 • runghc • 把Haskell当脚本来运行 • cabal • 程序包的大管家 • 各种各样的常用库 Haskell Platform
GHCi Read Evaluation Print Loop
动手吧 ghci> 313 ^ 15 27112218957718876716220410905036741257ghci> 2 + (-3)-1ghci> not (2 /= 3 || 1 == 9 && 10 == 10)Falseghci> [3,1,3] ++ [3,7][3,1,3,3,7]
动手吧 ghci> let deadline = 2012ghci> deadline2012ghci> :m +Data.Ratio ghci> 11 % 29 11%29ghci> :t itit :: Ratio Integerghci> :quit
Emacs • vi • 其它的编辑器,只要你喜欢 老派人士的编程环境
谢天谢地,总算有个IDE! http://leksah.org/
我们使用的主要教材 The Haskell School of Expression SOE
Samuel Silas Curry@SOE • 前言提到的这位人士: • 1847-1921,美国的著名教育家,教授如何演讲 • 当时美国的主流演讲学派充斥着机械的方法、刻板的规则、造作的姿态、毫无创造力的模仿。 • 曾经失声,之后遍访欧美的专家(包括表演艺术家),重新恢复了声音并对如何表达有了极为深刻的理解。这种独特的经历,孕育出一种独特的演讲教学法。 • 创建了School of Expression。
“所有的表达都是由内而外、由里至表、由藏到露,是一个自然而然的过程。对它进行深入的研究会让你知晓事物的起因并触及事实的源头。”“所有的表达都是由内而外、由里至表、由藏到露,是一个自然而然的过程。对它进行深入的研究会让你知晓事物的起因并触及事实的源头。” • Expression的一语双关 • 表达式——Haskell里承载计算的实体 • 思想、意图、情感的表达 SOE
如果仅仅把生硬的语言细节教授给C、Java...程序员,那么她写出来的程序很可能非常丑陋。如果仅仅把生硬的语言细节教授给C、Java...程序员,那么她写出来的程序很可能非常丑陋。 • 但如果她领悟了Haskell的思考方式并打心眼里愿意遵从,那么优美的程序就是自然的结果了。 • 所以,接下来的东西如果你觉得too simple, sometimes naive,或者很怪异,请保持耐心!这些东西会展现威力的。 Paul Hudak的目标
头脑不仅仅局限在Haskell里,试着去了解别的FP:Lisp/Scheme、Erlang、ML、F#、Scala,他们并不难以亲近头脑不仅仅局限在Haskell里,试着去了解别的FP:Lisp/Scheme、Erlang、ML、F#、Scala,他们并不难以亲近 • 也不仅仅局限在FP里,对比主流的过程式、OO语言对同一个问题的解决方案,或许会得到很多启发。 • 比如,在JavaScript里实现Curry机制? 让眼睛睁得更大
父亲 Samuel Silas Curry 一点额外的八卦 孩子 Haskell Brooks Curry
每个人都会算数:3 * (9 + 5) 3 * 14 42 换个次序:3 * (9 + 5) 3*9 + 3*5 27 + 3*5 27 + 15 42 通过算数(Calculation)进行计算(Computation) 2步 4步
表达式和值 • 表达式是运算的对象 • 值是结果,表达式算到无法再算就成了值
表达式和值的 类型是 集合 具有相同性质的 exp :: T表示:exp的类型是T • 原子表达式: 42 :: Integer ’a’ :: Char True :: Bool • 结构化表达式:[1,2,3]::[Integer] -整数列表(’b’,4)::(Char,Integer) -包含字符与整数的二元组 • 函数:(+) :: Integer -> Integer -> Integer
bot = bot + 1 ⊥ bottom
strict f(⊥) = ⊥ myfun n = 2012 myfun bot = ? Haskell是non-strict的 ?= 2012
算算3个圆的面积 totalArea = 3.14159 * r1 ^ 2 + 3.14159 * r2 ^ 2 + 3.14159 * r3 ^ 2 一个例子
命名(naming): pi = 3.14159 • 找出不断重复的模式(functional abstraction):circleArea r = pi * r ^ 2listSum [] = 0listSum (a:as) = a + listSum as • 通用的数据结构(data abstraction):totalArea = listSum [circleArea r1, circleArea r2, circleArea r3] 抽象
ghci的基本使用 • computation by calculation • 表达式,值,类型(包括function signature) • bottom, strict, non-strict • pattern matching • 命名(single binding),函数抽象,数据抽象 • 认识了list 总结
关于作者 @邓际锋, 网易杭研院程序员 个人研究兴趣 • 编程语言的设计与实现 • 交互式艺术及FP在该领域的应用 • 如何为儿童和非技术人员开发富有乐趣的创作工具 http://weibo.com/ideamonad soloist.deng@gmail.com http://blog.csdn.net/soloist