Answers:
1+
和1-
递增和递减代替(+ a 1)
或(- b 1)
尝试(1+ a)
或(1- b)
。
1+
解析为两个标记,1
和+
?我以为是+1
。
GNU Common Lisp
~v^
在向上和出指令~^
是最常用的格式化操作的最后一个列表项后,终止列表中使用。但是,它也可以与v
修饰符一起使用以使用参数,在这种情况下,如果该参数为零,它将终止。这对于处理由产生的零特别有用dotimes
。
(loop as n from 1 to 10 do(format t"~d~%"n))
(dotimes(n 11)(if(> n 0)(format t"~d~%"n)))
(dotimes(n 11)(format t"~v^~d~%"n n))
format(condition)
的第一个参数format
可以是t
,nil
aka ()
或流中的一个。如果传递了t
,则将输出到stdout
,如果nil
它将格式化后的输出作为字符串返回。可以有条件地使用它。上面的示例可以写成如下简短形式:
(dotimes(n 11)(format(> n 0)"~d~%"n))
如果输出了值,则返回值为nil
。因此,它也可以用作do
循环的终止条件:
(do((n 11))((<(decf n)1))(format t"~d~%"n))
(do((n 11))((format(>(decf n)0)"~d~%"n)))
~[...~]
条件格式化程序使用一个参数,然后从索引列表中选择一个格式化字符串。一个常见的用例是使用默认格式化程序~:;
在零与非零之间进行选择。
(dotimes(n 11)(format t"~v^~[~r~:;~d~]~%"n(mod n 3)n))
条件格式器也可以嵌套,在这种情况下,每个格式器将依次使用一个参数。
~&
在上面的每个示例中,~%
用于发出换行符。在大多数情况下,可以用文字换行符代替。另一个选择是使用~&
,当且仅当输出光标不在行的开头(也称为a)时,它才会发出换行符fresh-line
。
二者~%
并~&
还可以采取一个参数,与v
改性剂或作为恒定,并且将产生尽可能多的换行。他们还将高兴地接受否定论点,在这种情况下,他们什么也不会发出。
实用的Lisp18
。一些格式食谱
Common Lisp语言,第二版
22.3.3。格式化输出到字符流