原文。
https://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours
概论
大部分网路上的Haskell教程会使用一种与语言参考手册类似的方式来进行教学。他们会告诉你语法和一些语言结构,然后让你在交互式命令行里写一些简单的函数。而如何用函数式的方式来写一个有用的程序的问题却被留在了最后面或是直接被忽略了。
而我们会用一种完全不同的方式。你会从使用和解析命令行参数开始,然后写一个能够实现R5RS Scheme标准的像模像样的子集的Scheme解释器。你将会学习到Haskell的I/O,可变状态,动态类型,错误处理以及其他相关的解析功能。而当你完成这个教程的时候,你就会对Haskell和Scheme相当熟悉了。
这个教程主要面向两大读者群:
- 已经掌握Lisp或Scheme并且想要学习Haskell的人
- 虽然不懂任何编程语言,但是有大量背景知识并且对计算机非常熟悉的人
第二种读者会发现这个任务有些困难,因为在这里省略了很多Scheme以及其他通用的编程概念从而把教程的重点放在Haskell上面。SICP或者The Little Schemer之类的书会对你很有帮助。
而那些使用像C,Java或者Python这样的基于过程或面向对象语言的用户需要注意了:你需要忘掉大部分你已经熟悉的编程知识。Haskell与上述的语言完全不同,并且要求你用一种完全不一样的方式来进行思考。最好以白板的状态来开始这个教程并且不要尝试将Haskell与命令式语言进行比较,因为很多你以为你熟悉的概念(classes,functions,return)在Haskell里有完全不同的含义。
由于每一课都建立在之前代码的基础上,所以你最好按顺序来学习课程。
这个教程假定你用ghc作为你的Haskell编译器。代码在Hugs或者其他编译器里或许也能运行但并没有被完全测试过,也许你还需要下载一些额外的库来支持他们。
目录
- First Steps: Compiling and running
- Parsing
- Evaluation, Part 1
- Error Checking and Exceptions
- Evaluation, Part 2
- Building a REPL: Basic I/O
- Adding Variables and Assignment: Mutable State in Haskell
- Defining Scheme Functions: Closures and Environments
- Creating IO Primitives: File I/O
- Towards a Standard Library: Fold and Unfold
- Conclusion & Further Resources
- Answers to Exercises