Lisp中的Symbol
Lisp中的Symbol(符号)这个概念在我熟悉的Python,Java,php中并不存在. 以下稍作总结以备忘:
一个Symbol在Lisp程序任意Scope中拥有唯一的字符名,用于在特定Scope中通过该Symbol来找到某个Variable(变量)或Function(函数). 这个概念类似其他语言中的Variable name(变量名)或Function name(函数名)。在python或Java中,变量名或函数名和名称所指的变量或函数同生同死,密不可分. 而Lisp的Symbol显得更为独立.
Symbol(符号) vs Viriable(变量)
- Lisp程序中,Viriable(变量)的值存储在指向该变量的Symbol(符号)的value cell(值单元)中. 一个Symbol在利用value cell储存变量的同时也可以利用function cell(函数单元)存储Function(函数)或Macros(宏). (就是说一个Symbol可以同时被作为变量和函数的标示使用)
Symbol带来的优势
在其他语言中当你的程序执行完 x= 7 语句后,你就不能再对x有进一步的操作了(对x的操作变成了对7的操作)。由于Symbol的value cell能存储Unevaluated variable(未解释变量)。 你可以随意变更Symbol value cell中存储的变量,然后在任意时候对其进行evaluate。 在其他语言中需要通过eval(myCodeString)来获得的延迟执行特性在Lisp中是内置且直观的。这种meta-program(元编程)技巧在处理以输入(远程获取,用户输入)作为运行代码时能发挥极大的优势.

