lisp 變數的作用域
lisp 的變數 作用域是 lexical scoping 的
我們看看下面的程式碼:
CL-USER> (setf c 'global-c)
; in: SETF C
; (SETF C 'GLOBAL-C)
; ==>
; (SETQ C 'GLOBAL-C)
;
; caught WARNING:
; undefined variable: C
;
; compilation unit finished
; Undefined variable:
; C
; caught 1 WARNING condition
GLOBAL-C
CL-USER> (defvar *d* 'global-d)
*D*
CL-USER> (defun fn() *b*)
STYLE-WARNING: redefining COMMON-LISP-USER::FN in DEFUN
FN
CL-USER> fn
; Evaluation aborted on #.
CL-USER> (fn
)
GLOBAL-B
CL-USER> (let (( c 'local-c)
(*d* 'local-d))
(list c *d* (fn) (symbol-value 'c) (symbol-value '*d*)))
(LOCAL-C LOCAL-D GLOBAL-B GLOBAL-C LOCAL-D)
CL-USER>
看結果不解釋
我們看看下面的程式碼:
CL-USER> (setf c 'global-c)
; in: SETF C
; (SETF C 'GLOBAL-C)
; ==>
; (SETQ C 'GLOBAL-C)
;
; caught WARNING:
; undefined variable: C
;
; compilation unit finished
; Undefined variable:
; C
; caught 1 WARNING condition
GLOBAL-C
CL-USER> (defvar *d* 'global-d)
*D*
CL-USER> (defun fn() *b*)
STYLE-WARNING: redefining COMMON-LISP-USER::FN in DEFUN
FN
CL-USER> fn
; Evaluation aborted on #
CL-USER> (fn
)
GLOBAL-B
CL-USER> (let (( c 'local-c)
(*d* 'local-d))
(list c *d* (fn) (symbol-value 'c) (symbol-value '*d*)))
(LOCAL-C LOCAL-D GLOBAL-B GLOBAL-C LOCAL-D)
CL-USER>
看結果不解釋
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/133735/viewspace-764845/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 變數作用域變數
- JS變數作用域JS變數
- SCSS 變數作用域CSS變數
- python變數與變數作用域Python變數
- java中變數的作用域Java變數
- JavaScript 變數的作用域鏈JavaScript變數
- C# 變數作用域C#變數
- Go語言中的變數作用域Go變數
- 現代 JavaScript 的變數作用域JavaScript變數
- Shell變數的作用域問題變數
- javascript中的作用域(全域性變數和區域性變數)JavaScript變數
- 變數物件與作用域鏈變數物件
- JavaScript之變數及作用域JavaScript變數
- JavaScript中變數和作用域JavaScript變數
- Go 中的動態作用域變數Go變數
- 函式(三)作用域之變數作用域、函式巢狀中區域性函式作用域、預設值引數作用域函式變數巢狀
- Python 函式和變數作用域Python函式變數
- Day08-常量、變數、作用域變數
- 變數、作用域與記憶體變數記憶體
- PHP 變數的四大作用域PHP變數
- CSS變數的作用域和預設值CSS變數
- golang變數作用域問題-避免使用全域性變數Golang變數
- 11-程式碼塊和變數的作用域變數
- ES6 變數作用域總結變數
- Java基礎06:變數、常量、作用域Java變數
- 語法1-變數、常量、作用域變數
- 原型模式故事鏈(5)--JS變數作用域、作用域鏈、閉包原型模式JS變數
- Go基礎知識-02 作用域 常量 變數 作用域(持續更新)Go變數
- 強大的CSS:var變數的區域性作用域(繼承)特性CSS變數繼承
- 迴圈輸出——閉包、變數作用域變數
- GO語言變數作用域-坑記錄Go變數
- JAVA基礎6-變數、常量、作用域Java變數
- js作用域(變數提升,預解析)例題JS變數
- java基礎06-變數、常量、作用域Java變數
- 為什麼要將區域性變數的作用域最小化?變數
- 十二、變數作用域:區域性變數、全域性變數,函式版名片管理系統—新增函式文件變數函式
- JS 底蘊之 變數、作用域和垃圾回收JS變數
- javascript:變數、作用域和記憶體問題JavaScript變數記憶體
- 【譯】終極指南:變數提升、作用域和閉包變數