* REPL = read-eval-print-loop
* ( foo bar1 bar2) 相当于 foo(bar1, bar2); 呵, 正好比后者少了两个符号, 一个逗号,一个分号.
* 默认情况下,表达式是要被求值的(是不是 lazy 的?), 什么是表达示, 就涉及到了 BNF 定义的问题.....
* 字符串和字符是什么关系? ( haskell 中 String = [Char], lisp 中呢?) 字符串处理是怎么搞的呢? cl-ppcre 中应该有很多相关的东东.
* function, macro, special operator 是三种不同的东东
* 冒号打头的名字,是 keyword symbol
Lisp functions take Lisp values as input and return Lisp values. They are executed at run-time. Lisp macros take Lisp code as input, and return Lisp code. They are executed at compiler pre-processor time, just like in C. The resultant code gets executed at run-time. Almost all the errors that result from using macros can be traced to a misunderstanding of this fact.
----
* 几本必须看的书
* cltl2 第 35 页,有各种诡异字符的意义
* common lisp 是不区分大小写的,似乎它有这样一个思想, shift 键要尽量少按,或者不按
* symbol, 很难理解的一个东东,但是当我理解到"数据和函数是一样的",就完全明白是怎么回事了,它就是一个"记号", 可能是数据,也可能是函数,没有区别. 可以认为 symbol 等价于 C 语言中的"符号表".
* assign 和 bound 的区别, assign 是改变一个 symbol 的 value, bound 是"先把一个 symbol 的值存起来,给它一个新的值, 出去作用域之后, 再把原来的值放回来", 和 perl 中的 local 变量类似.
* list 处理的几个重要函数 : map mapcar reduce remove-if remove-if-not
* values 函数,可以用于形成"多个值", 比如多个返回值......