Haskell函数程序设计基础
分享
课程详情
课程评价
spContent=本课程面向程序设计初学者,用函数式程序设计语言Haskell介绍现代函数程序设计的思想方法。Haskell函数式程序在更高抽象层描述程序的计算逻辑,程序简洁优美,语义清晰,易于推理,因此更便于维护和保证程序的正确性。函数式程序设计的许多思想方法已经融入其他程序设计语言的设计,例如Java和Python语言的lambda表达式,高阶函数map和reduce等。掌握函数式程序设计思想和方法将使得您成为更优秀的程序员。
—— 课程团队
课程概述

       本课程用函数式程序设计语言Haskell讲解现代函数式程序设计的基本思想方法。   

       高级程序设计语言大致可分为命令式和声明式。命令式语言如C、Java和Python等,这种语言的程序用一个语句序列描述如何一步步完成一个计算,特点是有副作用。例如,计算1至n的和,命令式语言通常形如:  

s = 0; for (int i=1; i<=n; i++)     s = s + i; print(s);这种程序通过不断修改变量s的值最后得到计算结果。重点描述如何计算

        Haskell函数式语言属于声明式语言,这种语言的程序通过计算逻辑表达计算,不需要描述计算次序,特点是无副作用。对于同样的问题,在Haskell语言中可以定义数学函数sum:

sum 0 = 0 sum n = n + sum (n-1)

在这里,计算1至n的和的Haskell函数程序是表达式sum n,sum是一个纯数学函数,n是数学意义上的变量,没有副作用。函数式程序重点描述计算什么

        函数式程序设计语言是建立在计算模型λ演算上的通用高级程序设计语言。由于它具有更高的抽象层次,更接近于人类的习惯数学思维,因此,更便于初学者理解掌握。

        函数式程序具有下列特点:

  • 简洁优美,容易理解。

        了解命令式程序设计的程序员明白,用命令式语言实现快速排序并不简单。然而,下面几行简短的Haskell代码用列表概括表达了快速排序的计算逻辑:


qsort []   = [] qsort (x:xs) = qsort [y|y <- xs, y < x] ++ [x] ++ qsort [y|y <- xs, y >= x]

这里[ ]表示空列表(或序列),(x:xs)表示非空列表,x是第一个元素,xs是尾列表,[y|y <- xs, y < x]表示xs 中小于x元素构成的列表,[y|y <- xs, y >= x]表示xs中大于等于x元素构成的列表,++表示将两个列表串接成一个列表的运算。

  • 无副作用,更少的程序错误。

        命令式程序中的函数多为有副作用的“过程”。一个纯函数的计算结果只与函数的输入有关,与计算次序无关,由此避免了命令式程序中由副作用引起的一类错误。

  • 高阶函数支持更高抽象性,支持模块化。

        在Haskell语言中,函数是“一等公民”,函数可以是其他函数的输入和输出,由此为代码重用性和模块化提供了方便。

  • 惰性计算为无穷数据结构提供支持。

        Haskell是一种惰性语言,这表明它只有在需要计算的时候才进行计算,或者只做必要的计算。这种惰性计算允许表达无穷数据结构,由此也为模块化提供了一种途径。

  • 易于推理,便于保证程序正确性。

        Haskell函数没有副作用,因此,可以像对待数学表达式那样对程序进行推理,便于确保程序的正确性。

        本课程是函数式程序设计的入门课程,也是一般程序设计的入门课程。本课程通过函数程序设计语言Haskell介绍函数程序的基本思想和方法,以及现代程序设计的基本思想,如函数抽象、多态、重载和高阶函数等。

        课程共11讲。前3讲构成程序设计的最基本内容,学完前三讲后学生便可以编写简单的函数程序。第4-6讲构成程序设计的进阶内容,学完第6讲以后学生可以编写较复杂的程序,并学会使用测试工具测试程序的性质。第7讲学习多态和重载的概念,如何编写多态和重载函数程序。第8讲学习函数式程序的重要特性高阶函数。第9讲学习如何自定义代数类型准确刻画数据。第10讲学习用Haskell如何编写有副作用的程序,包括交互式小游戏和模拟计算。第11讲学习Haskell的惰性计算策略,如何基于惰性计算使用无穷数据结构处理数据。

        对于初学程序设计的学生,本课程将为学生提供一个更简单的计算模型,专注于数学或者抽象层面的程序设计思想和方法,完成课程后将能使用Haskell函数语言解决一些实际问题。

        对于已经掌握一门程序设计语言的学生,修读该课程后将可以用函数式程序设计的思想理念设计更清晰、易读和易维护的程序,成为更好的程序员。

       事实上,程序设计语言存在几百种(据统计有超过700种),一名优秀的程序员不是掌握了很多种语言,而是应该掌握几百种语言背后的少数几种编程范式(programming paradigm),或者程序设计概念模型,包括命令式程序设计、函数式程序设计、面向对象的程序设计、逻辑程序设计和数据流程序设计等。

授课目标
  1. 掌握一般程序设计的基本概念和方法。

  2. 掌握函数程序设计的基本思想和方法。

  3. 能够用Haskell语言设计程序解决实际问题。

课程大纲
证书要求

为积极响应国家低碳环保政策, 2021年秋季学期开始,中国大学MOOC平台将取消纸质版的认证证书,仅提供电子版的认证证书服务,证书申请方式和流程不变。

 

电子版认证证书支持查询验证,可通过扫描证书上的二维码进行有效性查询,或者访问 https://www.icourse163.org/verify,通过证书编号进行查询。学生可在“个人中心-证书-查看证书”页面自行下载、打印电子版认证证书。

 

完成课程教学内容学习和考核,成绩达到课程考核标准的学生(每门课程的考核标准不同,详见课程内的评分标准),具备申请认证证书资格,可在证书申请开放期间(以申请页面显示的时间为准),完成在线付费申请。

 

认证证书申请注意事项:

1. 根据国家相关法律法规要求,认证证书申请时要求进行实名认证,请保证所提交的实名认证信息真实完整有效。

2. 完成实名认证并支付后,系统将自动生成并发送电子版认证证书。电子版认证证书生成后不支持退费。


参考资料

1.《Haskell程序设计基础》,乔海燕,周晓聪编写,清华大学出版社,2022。

2. 《Haskell函数式编程基础》(Haskell: The Craft of Functional Programming),Simon Thompson著,乔海燕,张迎周翻译,科学出版社,2015。