我将教授一门离散结构的低除法课程。我之所以选择 离散结构、逻辑和可计算性这本教科书,部分原因是它包含有助于使用函数式编程语言实现的示例和概念。(我也认为这是一本很好的教科书。)
我想要一个易于理解的 FP 语言,以说明 DS 的概念,学生可以使用。大多数学生最多只学过一两个学期的 Java 编程。在查看 Scheme、 Erlang、哈斯克尔、 Ocaml 和 SML 之后,我选择了 Haskell 或 Standard ML。由于下面列出的原因,我倾向于 Haskell,但是我想听听那些活跃的程序员的意见。
本质上,SML 和 Haskell 大致相当。我倾向于 Haskell,因为我喜欢哈斯克尔的列表理解和无限列表。但我担心,哈斯克尔紧凑语法中大量的符号可能会给学生带来问题。通过阅读其他关于 SO 的文章,我发现对于初学 FP 的人来说,不推荐使用 Haskell。但是我们不打算构建成熟的应用程序,只是尝试简单的算法。
你觉得怎么样?
编辑: 在阅读你的一些伟大的回应,我应该澄清我的一些要点。
在 SML 中,在解释器中定义函数和在外部文件中定义函数之间没有语法区别。假设您想编写阶乘函数。在哈斯克尔,你可以把这个定义放到一个文件中,然后把它加载到 gHCi 中:
fac 0 = 1
fac n = n * fac (n-1)
对我来说,这是明确的,简洁的,并符合书中的数学定义。但是如果你想直接用 GHCi 写函数,你必须使用不同的语法:
let fac 0 = 1; fac n = n * fac (n-1)
当使用交互式解释器时,从教学的角度来看,当学生可以在文件和命令行中使用相同的代码时,这是非常非常方便的。
通过“显式确认函数”,我的意思是在定义函数时,SML 立即告诉您函数的名称、参数的类型和返回类型。在哈斯克尔,你必须使用 abc0命令,然后你会得到一些令人困惑的咖喱符号。
Haskell 还有一个很酷的地方——这是一个有效的函数定义:
fac 0 = 1
fac (n+1) = (n+1) * fac n
同样,这与他们可能在教科书中找到的定义相匹配。在 SML 中无法做到这一点!