Lisp 經過宏傳遞引用

我一直遺憾 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 獨有的。引用

相關文章
相關標籤/搜索