伞哥放出《实用 Common Lisp 编程》PDF 电子版


#21

哪位能试一下

CL-USER> (format t "a:~10t~a" :artist "Dixie Chicks")
ARTIST: DixieChicks
NIL

我的环境里是这样的

Break 15 [28]> (format t "~:a~10t~a" :artist "Dixie Chicks")
ARTIST    Dixie Chicks
NIL

#22
CL-USER> (format t "~a:~10t~a" :artist "Dixie Chicks")
ARTIST:   Dixie Chicks
NIL

原版是这样的。你为什么两个都不一样,这就有趣了。我看你复制代码还是直接对照原版的吧。


#23

学语言和format string较什么真啊 :joy:。用到查一下就好了


#24

你说的不是重点,我们是在讨论 mac 上的 clisp和书上的 common lisp不兼容的问题


#25

不可能有不兼容。你看的翻译版代码都抄错了才是问题的来源。


#26

format是受ANSI Common Lisp标准限定的,如果你实现有问题说明你用了山寨实现


#27

关键是 我是 拷贝的,改后才能和书上一样的结果,算了,不争了,多谢各位


#28

因为书里代码和结果都是从原版抄的,结果书里代码抄错了,结果自然不一样,有什么逻辑问题么。

哦,我懂了,你是从 PDF 上复制的文字,有些制作得不规范的或者是OCR 的 PDF 实际复制出来的文字是不一样的,所以你的回答里书上是

你在 repl 里打的是


#29

我下了作者的源码也是跟书上的一样的,所以才提出版本的问题

我用的是这个版本:

Welcome to GNU CLISP 2.49 (2010-07-07) <http://clisp.cons.org/>

Copyright (c) Bruno Haible, Michael Stoll 1992, 1993
Copyright (c) Bruno Haible, Marcus Daniels 1994-1997
Copyright (c) Bruno Haible, Pierpaolo Bernardi, Sam Steingold 1998
Copyright (c) Bruno Haible, Sam Steingold 1999-2000
Copyright (c) Sam Steingold, Bruno Haible 2001-2010

Type :h and hit Enter for context help.

#30

是译者不是作者。

原版在这里 http://www.gigamonkeys.com/book/practical-a-simple-database.html

代码是

“~a:~10t~a”

你说书上的是 “a:~10t~a” ,明显不一样好吗。

说明要么你搞错了,要么就是源码有问题


#31

好歹我也是写过几行代码的人,不会这个也不知道,我说的却是事实,验证一下在讨论吧


#32

这一点说的对,还有冒号的位置问题 是在a前面还是后面 我的是在前面

Break 15 [28]> (format t "~:a~10t~a" :artist "Dixie Chicks")
ARTIST    Dixie Chicks
NIL
Break 15 [28]> (format t "~a:~10t~a" :artist "Dixie Chicks")
ARTIST:   Dixie Chicks
NIL

#33

所以是你看的翻译版打错了代码。一切代码请以原版为准。只不过刚好打错的版本也是合法代码,能运行结果不同而已。


#34

自己测一下,谢谢,


#35

CLISP实现的确不行,别用了。用SBCL吧

%E5%9B%BE%E7%89%87


#36

他用的代码就是错的,原版冒号在 a 后面。你也没发现你用的两个代码冒号顺序不一样?

%E5%9B%BE%E7%89%87

%E5%9B%BE%E7%89%87


#37

被他绕进去了 :joy:

%E5%9B%BE%E7%89%87



#38

是“已绝版多年”,不是“以绝版多年”。


#39

format不用花太多时间啦. 伞哥放出来这个是他翻译稿转的pdf,不知道有没有校对过,有错的话可以对照下原版,有空也可以微博@一下他.

format里面 ~a相当于占个位置,~a:就是一个占位符一个: ,后面的:是冒号本身,无特殊意义,可以打印出来. 但是~:a是特殊符号,这里的:是个修饰符,比如打数字:

(format t “~d” 100000) ;;=> 100000

(format t “~:d” 100000) ;;=>100,000 多一个逗号

format用法超级多,大小写什么的不在话下,甚至可以把数字打印成英语:

(format t “~:r” 1) ;;=> first

(format t “~r” 1) ;;=>one

另外还有一个修饰符~@,具体可以自己试一下. 不过format比较细节,后面翻翻文档就好.

这本书我觉得比较好的是,后面的例子比较实用,可以快速看看语法然后往后翻.


#40

忘记@了哈哈哈哈,↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑