从Practical Common LISP格式化%10t错误

时间:2013-03-29 16:23:56

标签: format lisp common-lisp sbcl practical-common-lisp

以下是该页面的链接:Chapter 3, Practical: A Simple Database。  基本上我有一个列表数据库,其中包含我想要显示的四个值。这是通过

完成的
(defun dump-db ()
  (dolist (cd *db*)
    (format t "~{~a:~10t~a~%~}~%" cd)))

唯一的问题是输出不太正确:

TITLE:  Home
ARTIST:   Dixie Chicks
RATING:   9
RIPPED:   T
... (Shortened for brevity)

出于某种原因“Home”没有在第10列开始,有人可以告诉我为什么吗?我正在使用SBCL运行代码,最新版本。

2 个答案:

答案 0 :(得分:3)

两件事:

<强>备注

0]表示您处于调试循环中。离它远一点。 help显示命令。

<强>问题

也许这是SBCL的一个错误。您可能想在其邮件列表中讨论它。那会很有用。

我的猜测:

* (dump-db)
^^ <- 2 characters
TITLE:  Home
^^^^^^^^ <- 8 characters, 2 less than specified

如果您回到顶层,则会看到SBCL提示符为* - 这是两个字符长。现在你看到Home的第一个缩进是两个字符短。因此,Lisp打印机认为提示符的两个字符位于同一行,然后位置十位于接下来的八个字符上 - 比需要的少两个字符。也许Lisp打印机被REPL编程的方式搞糊涂了。接下来的行很好。

顺便说一下,LispWorks或Clozure CL不会发生这种情况。

答案 1 :(得分:0)

0] (dump-db)    
TITLE:  Home
ARTIST:   Dixie Chicks
RATING:   9
RIPPED:   T

TITLE:    Fly
ARTIST:   Dixie Chicks
RATING:   8
RIPPED:   T

TITLE:    Roses
ARTIST:   Kethy Mattea
RATING:   7
RIPPED:   T


NIL
0] (dump-db)
TITLE:    Home
ARTIST:   Dixie Chicks
RATING:   9
RIPPED:   T

TITLE:    Fly
ARTIST:   Dixie Chicks
RATING:   8
RIPPED:   T

TITLE:    Roses
ARTIST:   Kethy Mattea
RATING:   7
RIPPED:   T


NIL
0] 

它似乎已经固定了......但我不确定如何或为什么(问题我仍然会喜欢答案)。