Haskell: The Craft of Functional Programming - 图1

    关键字:函数,高阶函数,递归,归纳法,Haskell,Programming,多态与重载,惰性求值,抽象数据类型

    推荐:★★★★
    难度:★

    豆瓣链接:https://book.douban.com/subject/1794389/


    本来以为这是一本通过Haskell来介绍函数式编程的书,
    可惜,越看越不像,
    它原来是一本介绍如何使用Haskell进行函数式编程的书。

    编程的概念和技术是不同的。
    本书写了很多编程的套路和最佳实践。
    阅读本书,可以对Haskell有更深的了解,
    可以用它玩的更好。

    本书深入浅出,
    不怕浪费纸张,只为了把问题讲明白。
    包括,一开始用图形化的方法介绍函数,
    这样函数的组合,Currying,都非常明显了。

    另外,对于程序正确性证明,也贯穿始终,
    让我们能从更高的角度理解递归和数学归纳法。

    为什么说视角比较高呢?
    因为第四章用了一章来介绍,
    如何处理一个一般的问题,
    包括思考问题的各个步骤。

    后面介绍数据类型的时候,也是如此,
    用Haskell作为强大的工具,聚焦于如何处理问题,
    而不是工具本身,
    让我想起了一本用Haskell写的《算法》。

    然后,归纳了一些常用的模式,
    例如,如何处理列表,等等,
    这样才是介绍高阶函数的最佳方式,
    任何概念都不是凭空出现的。

    还是那句话,
    本书介绍如何用Haskell编程。

    然后,开始介绍了Haskell的重载机制,
    深入到类型类,以及类型推导中,
    介绍了多态类型。

    当这些基本的知识点都覆盖到后,
    就着手介绍了数据类型了,
    代数数据类型,抽象数据类型,
    这两个概念,
    从面向对象阵营过来的人,总是容易混淆。

    最后,深入学习了,
    Haskell的惰性求值,IO,
    末尾分析了一下时空复杂度。

    本书没有涉及太多的数学,
    介绍函数式编程时,并没有提及lambda演算,类型系统,
    介绍惰性时,也没有提及non-strict semantics或Weak head normal form。
    但依然说的很清楚明白,毕竟不是所有人都需要形式化的定义来理解问题。

    书中主要以语言的使用者出发,
    分析语言特性引入的原因,
    以及怎样用恰当的方法解决问题。

    当有了一些Haskell语法基础后,
    阅读本书效果更好。

    像很多好的技术书籍一样,
    这本书谈技术,但很有启发性,
    值得多次阅读。