Man*_*uel 0 lisp stack common-lisp
我试图找出在Common Lisp中清空列表(看作堆栈)的方法.
我想出了这个:
(defun emptystack ()
(dolist (var *stack*) (pop *stack*)))
Run Code Online (Sandbox Code Playgroud)
但它在编译时生成警告(VAR已定义但从未使用过).
然后我认为这样做会更简单:
(setq *stack* nil)
Run Code Online (Sandbox Code Playgroud)
但是,我仍然想知道是否有任何方法像第一个函数那样手动完成,但没有任何未使用的变量.
人们可以申报到忽略了未使用的变量:
(defun emptystack ()
(dolist (var *stack*)
(declare (ignore var))
(pop *stack*)))
Run Code Online (Sandbox Code Playgroud)
随着DO宏:
(defun emptystack ()
(do () ; no bindings
((null *stack*)) ; end test, no further results
(pop *stack*))) ; body
Run Code Online (Sandbox Code Playgroud)
在LOOP一个人也可以通过命名它来忽略变量nil:
(defun emptystack ()
(loop for nil in *stack* do (pop *stack*)))
Run Code Online (Sandbox Code Playgroud)
你可以用
(defun emptystack ()
(loop while *stack* do (pop *stack*)))
Run Code Online (Sandbox Code Playgroud)
确实没有使用引擎盖下的变量:
? (macroexpand-1 '(loop while *stack* do (pop *stack*)))
(BLOCK NIL (ANSI-LOOP::LOOP-BODY NIL ((UNLESS *STACK* (GO ANSI-LOOP::END-LOOP))) ((POP *STACK*)) ((UNLESS *STACK* (GO ANSI-LOOP::END-LOOP))) NIL))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |