Lisp变量

词法变量lexical    
    Command Lisp是动态类型的强类型
    (let (variable*) body-form*)        (let ((x 10) (y 20) z) ...)
    绑定形式=函数定义+LET 
    (dotimes (x 10) (format t "~d " x))
    (let* ((x 10) (y (+ x 10))) (list x y)) <---> (let((x 10) (let ((y (+ x 10))) (list x y)))
闭包
    (defparameter *fn* (let ((count 0)) #'(lambda () (setf count (1 + count)))))  以后每次调用funcal *fn*,count的值就会加1
    (let ((count 0)) (list #'(lambda () (incf count)) #'(lambda () (decf count)) #''(lambda () count)))    递增、递减、不变
 动态变量             变量名、初值、文档字符串
    (defvar *count* 0            只有变量未定义才会赋初值,可以不给定初值定义unbound未绑定的
        setf或者先makunbound在defvar
        "Count of widgets made so far.")
    (defparameter *gap-tolerance* 0.001    必须有初值,必赋初值 
        "Tolerance to be allowed in widget gaps.") 
    (let ((*standard-output* *some-other-stream*)) (stuff)) 
    (defvar *x* 10)
    (defun foo () (format t "X: ~d~%" *x*))
    (foo) ------------> 10
    (let ((*x* 20)) (foo)) ------> 20
posted @ 2016-11-10 11:35  fyk1Ex  阅读(462)  评论(0)    收藏  举报