Practical Common Lisp
LISP 最重要的一种运行模式之一:REPL
That endless cycle of reading, evaluating, and printing is why it's called theread-eval-print loop, or REPL.
第一个LISP程序: 在REPL模式下运行LISP 表达式:(+ 1 2)
LISP先READ (+ 1 2)
再EVALUATE
然后PRINT: 3
比较奇怪的是操作符在操作数之前,整个表达式用括号包起,所以可以在LISP源码中看到无数头晕的括号。
为什么要把操作符放在前面呢? 有两个好处:
一、 操作符代表了对后面一批操作数的操作,比如:
(+ 1 2 3 4 5)
等价:1 + 2 + 3 + 4 + 5
比普通方式更简洁,而且没有歧义。
二、可以把表达式写一个天然的二叉树。
看这样的例子:
(+ (* 2 (- 5 2)) (/ 6 3))
如改写成这样就不会头晕了:
(+ (* 2
(- 5
2))
(/ 6
3)
)
天生就是一棵横着生长的树,酷吧。