Chinaunix首页 | 论坛 | 博客
  • 博客访问: 471509
  • 博文数量: 120
  • 博客积分: 3052
  • 博客等级: 中校
  • 技术积分: 1755
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-01 09:43
文章分类

全部博文(120)

文章存档

2011年(20)

2010年(3)

2009年(52)

2008年(45)

我的朋友

分类: LINUX

2011-04-30 15:10:58

* 表达式, 是可以 eval, 且总会得到一个值的( 尽管有时被忽略 );而语句, 虽然可以返回值, 但一定是有副作用的, 这就是两者最大的区别.在 lisp 里, 都是表达式, 虽然有的表达式有副作用, 但是所有的表达式都有值.
* 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
* 关于 macro 的一个经典解释 : 

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),

* 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 函数,可以用于形成"多个值", 比如多个返回值......

阅读(982) | 评论(0) | 转发(0) |
0

上一篇:lisp 和 haskell

下一篇:sbcl 中的一些疑问

给主人留下些什么吧!~~