避免Clozure lisp中的回声(noob)

避免Clozure lisp中的回声(noob),lisp,common-lisp,Lisp,Common Lisp,我被口齿不清弄湿了脚,遇到了一个(我想)不寻常的问题。我想创建很长的列表;也就是说,类似于(setf*mat*(make list 1000000)),但没有在屏幕上打印出一百万次Nil 我想到的最好的办法是 (let () (setf *mat* (make-list 1000000)) (length *mat*)) (或在闭包结束时使用其他一些简短但无用的功能) …但我怀疑有更好的解决方案来避免这些倍半的打印输出。欢迎您的任何意见。顺便说一句,我使用的是Windows7下的Clozure

我被口齿不清弄湿了脚,遇到了一个(我想)不寻常的问题。我想创建很长的列表;也就是说,类似于
(setf*mat*(make list 1000000))
,但没有在屏幕上打印出一百万次
Nil

我想到的最好的办法是

(let () (setf *mat* (make-list 1000000)) (length *mat*))
(或在闭包结束时使用其他一些简短但无用的功能)


…但我怀疑有更好的解决方案来避免这些倍半的打印输出。欢迎您的任何意见。顺便说一句,我使用的是Windows7下的ClozureV1.10。

通常人们会在最后调用
(值)

Common Lisp有一种在打印机级别处理长输出的方法:

Welcome to Clozure Common Lisp Version 1.9-dev-r15612M-trunk  (DarwinX8664)!
? *print-length*
NIL
? (setf *print-length* 100)
100
? (make-list 1000000)
(NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL
 NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL
 NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL
 NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL
 NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL
 NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL
 NIL NIL NIL NIL ...)

*打印长度*
这里是控制它的变量。

通常在末尾调用
(值)

Common Lisp有一种在打印机级别处理长输出的方法:

Welcome to Clozure Common Lisp Version 1.9-dev-r15612M-trunk  (DarwinX8664)!
? *print-length*
NIL
? (setf *print-length* 100)
100
? (make-list 1000000)
(NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL
 NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL
 NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL
 NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL
 NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL
 NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL
 NIL NIL NIL NIL ...)

*打印长度*
这是控制打印长度的变量。

设置
*打印长度*
的替代方法是在repl上使用
defparameter
而不是
setf
defparameter
返回符号而不是值:

(defparameter *mat* (make-list 10000))
-> *mat*

设置
*打印长度*
的替代方法是在repl上使用
defparameter
而不是
setf
defparameter
返回符号而不是值:

(defparameter *mat* (make-list 10000))
-> *mat*