Common Lisp 中使用 print 不打印的方法?

我在写一个存文件的操作,在最后使用print函数,但是内容太多,每次打印会使slime报出“内容过多”而断开连接。我发现是我在存储时所使用的print函数,导致大文件中的内容被打印出来。请问如何只保存文件而不打印的方法。

(defun save-image-data (&optional (file "test"))
  (with-open-file (out file
                       :direction :output
                       :if-exists :supersede)
    (print (png-read:image-data *png-object*) out)))

不知道为什么要用 print,如果只是要返回数据,或者要输出到标准输出,大概可以用 format

format 也会在 REPL上打印吧? 有什么办法不打印呢?

format 可以把第一个参数设成 nil。 具体的记得不是很清楚了。:upside_down_face:

CL 的 format 和它在 emacs lisp 的用法是完全不一样的。各种意义上。

我记得在emacs-lisp中,print提供了第三个参数,可以自定义print的输出流。 比如:

(defun var_dump (v)
  (let ((s ""))
    (print
     v
     '(lambda (c)
       (setq s (concat s (char-to-string c)))))
    s))

(var_dump '(1 2 (3 4)))

上面的代码通过重定义第三个参数,将print的输出导入到了字符串s中。 这是emacs-lisp的写法,我不清楚cl行不行。。。。

区别很大。。。

不懂 Common Lisp,但你的函数的返回值看起来是文件的内容,因此你自己需要注意避免让 REPL 直接执行它,不然内容太多的话,REPL 出现问题并不奇怪。

问题已经解决: 使用format函数可以避免输出在REPL中谢谢 各位