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
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

浙公网安备 33010602011771号