1. 在Common Lisp 眼中,一個符號的symbol-value 和symbol-function 是不同的,而Scheme
對二者不做區分。在Scheme 裏面,變量只有惟一對應的值,它能夠是個函數,也能夠是另外一種對
象。所以,在Scheme 中就不須要#’ 或者funcall 了。Common Lisp 的:
(let ((f #’(lambda (x) (1+ x))))
(funcall f 2))
在Scheme 中將變成:
(let ((f (lambda (x) (1+ x))))
(f 2))
2. 因爲Scheme 只有一個名字空間,於是它沒有必要爲各個名字空間專門設置對應的賦值操做
符(例如defun 和setq)。取而代之,它使用define,define 的做用和defvar 大體至關,同時
用set! 替代了setq。在用set! 爲全局變量賦值前,必須先用define 建立這個變量。
3. 在Scheme 中,一般用define 定義有名函數,它行使着defun 和defvar 在Common Lisp 中的功
能。Common Lisp 的:
(defun foo (x) (1+ x))
有兩種可能的Scheme 翻譯:
(define foo (lambda (x) (1+ x)))
(define (foo x) (1+ x))
4. 在Common Lisp 中,函數的參數按從左到右的順序求值。而在Scheme 中,有意地不對求值順序
加以規定。(而且語言的實現者對於忘記這點的人幸災樂禍。)
5. Scheme 不用t 和nil,相應的,它有#t 和#f。空列表,(),在某些實現裏爲真,而在另外一些實現裏
爲假。
6. cond 和case 表達式裏的默認子句在Scheme 中帶有else 關鍵字,而不是Common Lisp 中的t。
7. 某些內置操做符的名字被改掉了:consp 成了pair?,而null 則是null?,mapcar (幾乎) 是map,
等等。一般根據上下文,應該能看出這些操做符的意思。函數