我一直遺憾 Lisp 沒有指針,對於動態做用域的 newLISP 能夠用傳遞符號來傳遞一個不求值的引用。 但對於 Scheme 這種靜態函數做用域的語言,如何傳遞引用呢?函數
用宏!宏不對參數進行求值,只是傳遞符號,在宏內部再進行求值,這樣就省卻了傳遞值的開銷。指針
> (define (pass-value x) x) > (define-macro (pass-ref x) (eval x)) > (time (pass-value (sequence 1 1000)) 10000) 324.019 > (time (pass-ref (requence 1 1000)) 10000) 166.009
那麼 Lisp 爲何會有 quote 呢?難道是爲了:code
(list 1 2 3) '(1 2 3)作用域
quote list, 能夠對其內的表達式暫緩求值,成爲處理許多未知函數的一個避風港。這種語言特性是 Lisp 獨有的。引用