重拾 Haskell
Long long ago and far far away, the first time I saw Haskell, I fell in love with it.
为什么呢?
因为我看到了以下两小行代码。
List Comprehension:
1
rightTriangles = [ (a,b,c) | c <- [1..20], b <- [1..c], a <- [1..b], a^2 + b^2 == c^2]
Quicksort:
1
2
3
4
5
quicksort [] = []
quicksort (p:xs) = (quicksort lesser) ++ [p] ++ (quicksort greater)
where
lesser = filter (< p) xs
greater = filter (>= p) xs
前者与数学中常见的集合写法一模一样,后者则比一般的伪代码还要简洁易懂 (虽然这并非真正的快排1,但用于学习算法却十分合适)。我感到了 Haskell 的优美与表达力。
稍微学习后 Haskell 强大的抽象能力令我印象深刻,尤其是学会写简单的 Parser Combinator 时。再后来我碰巧看了些 SICP 学了点Lisp。 除了没有 宏 Marco (也不可能有) 以外,在我感兴趣的范围内 (以 AI 为主的 大型工程 或 工业界应用,不了解也不评价),写代码的简洁程度,易维护性 Haskell 都远胜 Lisp。在经验与技巧的支撑下,Haskell 的性能在流行的编程语言中也名列前茅。
但说道底只是学着玩,有其他更重要的事做,或者学习过程中啃到硬骨头,自然就停了下来,挺多年没写过了。
在那时我大概学了这些内容:
- 读了一些书
- Learn You a Haskell
- Programming in Haskell - 2nd Edition
- Real World Haskell (没读完)
- Codewars 当作玩解谜游戏一样刷了很多 Haskell kata
- natural number 的各种玩法
- 一些 combinator (比如 SKI)
- 各种 type hole 完形填空
- 了解 PL/编译器 相关的一些基础
- 生成解析 Abstract Syntax Tree,跟着教程搓了一个毫无优化,功能阉割的 lisp
- 控制 lazinesss
- Continuation-Passing Style
- Calculating Correct Compilers
- 看了些 blogs/tutorials
- 雾雨魔法店
- ice1000 的早期博客(虽然被本人视作黑历史削除了)
- Bartosz Milewski’s Programming Cafe
- 使用了一些 Haskell 写的软件
- pandoc
- hakyll (静态站点生成器)
- 甚至学了点 agda
由于时间过于久远,做了一些复健。很快把 Learn You a Haskell 扫了一遍,接着写了 Ninety-Nine Haskell Problems 练练手。
之后打算先看看 What I Wish I Knew When Learning Haskell。然后学一下 lens,了解它的原理,看看它如何在大型项目中使用,最好自己也用一用。
前段时间,在这个介绍 PNG 格式图像压缩的视频里,了解到了 QOI 这个简单高效仅问世 1 年的图片格式,挺有趣的,打算拿 Haskell 写一个试试,虽然有人已经做过这事了(
-
https://stackoverflow.com/questions/7717691/why-is-the-minimalist-example-haskell-quicksort-not-a-true-quicksort ↩
Comments powered by Disqus.