在Clozure lisp(noob)中避免回声

Pau*_*des 1 lisp common-lisp

我正在用lisp弄湿我的脚,并遇到一个(我认为)不寻常的问题.我想创建很长的列表; 即,类似的东西(setf *mat* (make-list 1000000)),但没有Nil在屏幕上打印出一百万次.

我想出的最好的是......

(let () (setf *mat* (make-list 1000000)) (length *mat*))
Run Code Online (Sandbox Code Playgroud)

(或在结束时的一些其他简短但无用的功能)

...但我怀疑有一个更好的解决方案来避免这些sesquipedalian打印输出.任何输入都表示赞赏.顺便说一下,我在Windows 7下使用Clozure v1.10.

Rai*_*wig 7

通常会(values)在最后打电话.

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 ...)
Run Code Online (Sandbox Code Playgroud)

*print-length* 这是控制它的变量.


m-n*_*m-n 7

设置的替代方法*print-length*是使用defparameter而不是setf在repl上.defparameter返回符号而不是值:

(defparameter *mat* (make-list 10000))
-> *mat*
Run Code Online (Sandbox Code Playgroud)