客服咨询
意见反馈
<p> 本课程用函数式程序设计语言Haskell讲解现代函数式程序设计的基本思想方法。 </p><p> 高级程序设计语言大致可分为命令式和声明式。命令式语言如C、Java和Python等,这种语言的程序用一个语句序列描述如何一步步完成一个计算,特点是有副作用。例如,计算1至n的和,命令式语言通常形如: </p><p><code class="brush:cpp;toolbar:false">s =...
乔海燕
本课程用函数式程序设计语言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),或者程序设计概念模型,包括命令式程序设计、函数式程序设计、面向对象的程序设计、逻辑程序设计和数据流程序设计等。
运营单位: 杭州沃土教育科技股份有限公司