1 / 24

深入浅出 Haskell

深入浅出 Haskell. 第 0 讲. 提纲. 课程计划表 开发平台与环境 Haskell 编程的基本概念与原理. GHC 高性能的编译器 GHCi 交互式解释器 runghc 把 Haskell 当脚本来运行 cabal 程序包的大管家 各种各样的常用库. Haskell Platform. GHCi R ead E valuation P rint L oop. 动手吧.

alvaro
Download Presentation

深入浅出 Haskell

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 深入浅出Haskell 第0讲

  2. 提纲 • 课程计划表 • 开发平台与环境 • Haskell编程的基本概念与原理

  3. GHC • 高性能的编译器 • GHCi • 交互式解释器 • runghc • 把Haskell当脚本来运行 • cabal • 程序包的大管家 • 各种各样的常用库 Haskell Platform

  4. GHCi Read Evaluation Print Loop

  5. 动手吧 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]

  6. 动手吧 ghci> let deadline = 2012ghci> deadline2012ghci> :m +Data.Ratio ghci> 11 % 29 11%29ghci> :t itit :: Ratio Integerghci> :quit

  7. Emacs • vi • 其它的编辑器,只要你喜欢 老派人士的编程环境

  8. 谢天谢地,总算有个IDE! http://leksah.org/

  9. 至少能一键搞定Hello World

  10. 我们使用的主要教材 The Haskell School of Expression SOE

  11. Samuel Silas Curry@SOE • 前言提到的这位人士: • 1847-1921,美国的著名教育家,教授如何演讲 • 当时美国的主流演讲学派充斥着机械的方法、刻板的规则、造作的姿态、毫无创造力的模仿。 • 曾经失声,之后遍访欧美的专家(包括表演艺术家),重新恢复了声音并对如何表达有了极为深刻的理解。这种独特的经历,孕育出一种独特的演讲教学法。 • 创建了School of Expression。

  12. “所有的表达都是由内而外、由里至表、由藏到露,是一个自然而然的过程。对它进行深入的研究会让你知晓事物的起因并触及事实的源头。”“所有的表达都是由内而外、由里至表、由藏到露,是一个自然而然的过程。对它进行深入的研究会让你知晓事物的起因并触及事实的源头。” • Expression的一语双关 • 表达式——Haskell里承载计算的实体 • 思想、意图、情感的表达 SOE

  13. 如果仅仅把生硬的语言细节教授给C、Java...程序员,那么她写出来的程序很可能非常丑陋。如果仅仅把生硬的语言细节教授给C、Java...程序员,那么她写出来的程序很可能非常丑陋。 • 但如果她领悟了Haskell的思考方式并打心眼里愿意遵从,那么优美的程序就是自然的结果了。 • 所以,接下来的东西如果你觉得too simple, sometimes naive,或者很怪异,请保持耐心!这些东西会展现威力的。 Paul Hudak的目标

  14. 头脑不仅仅局限在Haskell里,试着去了解别的FP:Lisp/Scheme、Erlang、ML、F#、Scala,他们并不难以亲近头脑不仅仅局限在Haskell里,试着去了解别的FP:Lisp/Scheme、Erlang、ML、F#、Scala,他们并不难以亲近 • 也不仅仅局限在FP里,对比主流的过程式、OO语言对同一个问题的解决方案,或许会得到很多启发。 • 比如,在JavaScript里实现Curry机制? 让眼睛睁得更大

  15. 父亲 Samuel Silas Curry 一点额外的八卦 孩子 Haskell Brooks Curry

  16. 每个人都会算数:3 * (9 + 5) 3 * 14  42 换个次序:3 * (9 + 5)  3*9 + 3*5  27 + 3*5  27 + 15  42 通过算数(Calculation)进行计算(Computation) 2步 4步

  17. 表达式和值 • 表达式是运算的对象 • 值是结果,表达式算到无法再算就成了值

  18. 表达式和值的 类型是 集合 具有相同性质的 exp :: T表示:exp的类型是T • 原子表达式: 42 :: Integer ’a’ :: Char True :: Bool • 结构化表达式:[1,2,3]::[Integer] -整数列表(’b’,4)::(Char,Integer) -包含字符与整数的二元组 • 函数:(+) :: Integer -> Integer -> Integer

  19. bot = bot + 1 ⊥ bottom

  20. strict f(⊥) = ⊥ myfun n = 2012 myfun bot = ? Haskell是non-strict的 ?= 2012

  21. 算算3个圆的面积 totalArea = 3.14159 * r1 ^ 2 + 3.14159 * r2 ^ 2 + 3.14159 * r3 ^ 2 一个例子

  22. 命名(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] 抽象

  23. ghci的基本使用 • computation by calculation • 表达式,值,类型(包括function signature) • bottom, strict, non-strict • pattern matching • 命名(single binding),函数抽象,数据抽象 • 认识了list 总结

  24. 关于作者 @邓际锋, 网易杭研院程序员 个人研究兴趣 • 编程语言的设计与实现 • 交互式艺术及FP在该领域的应用 • 如何为儿童和非技术人员开发富有乐趣的创作工具 http://weibo.com/ideamonad soloist.deng@gmail.com http://blog.csdn.net/soloist

More Related