常见的lisp:如何抑制换行或"软回归"

147*_*7pm 0 common-lisp

这段代码

 (defun arabic_to_roman (filename)
     (let ((arab_roman_dp '())
           (arab nil)
           (roman nil))

       (with-open-file (in filename
                           :direction :input
                           :if-does-not-exist nil)

         (when in
           (loop for line = (read-line in nil)
              while line do
                (setq arab (subseq line 0 (search "=" line)))
                (setq roman (subseq line (1+ (search "=" line)) (length line)))
                (setf arab_roman_dp (acons arab roman arab_roman_dp))
                                           ;(format t "~S ~S~%" arab roman)
                )))

       (with-open-file (stream #p"ar_out.txt"
                               :direction :output
                               :if-exists :overwrite
                               :if-does-not-exist :create )
         (write arab_roman_dp :stream stream :escape nil :readably nil))
       'done!))
Run Code Online (Sandbox Code Playgroud)

似乎运作良好.它需要一个包含这样的条目的文件

1=I
2=II
...
Run Code Online (Sandbox Code Playgroud)

并构建一个大的点对列表.但是,当我查看输出文件时,似乎已经插入了软返回或换行符.

((4999 . MMMMCMXCIX) (4998 . MMMMCMXCVIII) (4997 . MMMMCMXCVII)
 (4996 . MMMMCMXCVI) (4995 . MMMMCMXCV) (4994 . MMMMCMXCIV)
 (4993 . MMMMCMXCIII) (4992 . MMMMCMXCII) (4991 . MMMMCMXCI) (4990 . MMMMCMXC)
...
Run Code Online (Sandbox Code Playgroud)

我期待输出看起来更像是一条连续线:

((4999 . MMMMCMXCIX) (4998 . MMMMCMXCVIII) (4997 . MMMMCMXCVII) (4996 .  MMMCMXCVI) (4995 . MMMMCMXCV) (4994 . MMMMCMXCIV) (4993 . MMMMCMXCIII) (4992 . MMMMCMXCII) (4991 . MMMMCMXCI) (4990 . MMMMCMXC) ...
Run Code Online (Sandbox Code Playgroud)

我的代码是否真的以某种方式投入新行?我使用的write版本princ据说可以抑制换行.后来我想将这个文件作为一个大的列表重新阅读到程序中,所以我不想要换行问题.

Bar*_*mar 6

它看起来像是调用漂亮的打印机(默认是依赖于实现),用缩进和人类可读的行长度打印它.使用:pretty nil禁用此.

(write arab_roman_dp :stream stream :escape nil :readably nil :pretty nil)
Run Code Online (Sandbox Code Playgroud)