在公共Lisp中用空格连接数字?
为Lisp程序编写一个简单的循环,我希望我的数字之间有空格在公共Lisp中用空格连接数字?,lisp,common-lisp,whitespace,Lisp,Common Lisp,Whitespace,为Lisp程序编写一个简单的循环,我希望我的数字之间有空格 (loop for i from 1 to 5 do (prin1 i)) 印刷品: 12345 我想把它打印出来: 1 2 3 4 5 但是我在任何地方都找不到任何关于打印空白的信息。感谢您的帮助 您需要自己打印空白。代码的简单扩展: (loop for i from 1 to 5 do (princ i) (princ #\space)) (请注意,我使用了princ
(loop for i from 1 to 5
do
(prin1 i))
印刷品:
12345
我想把它打印出来:
1 2 3 4 5
但是我在任何地方都找不到任何关于打印空白的信息。感谢您的帮助 您需要自己打印空白。代码的简单扩展:
(loop for i from 1 to 5
do (princ i)
(princ #\space))
(请注意,我使用了
princ
而不是prin1
)所有足够成熟的编程语言都会经历一个阶段,即在字符串中嵌入另一种编程语言,通常是为了控制打印输出。真正成熟的编程语言经过了这个阶段:CL还没有那么成熟,仍然有格式
控制字符串。你可以用这些做各种各样的事情
您的示例的一个细微变化是使用格式
打印列表:
> (format t "~&~{~A~^, ~}.~%" '(1 2 3 4 5))
1, 2, 3, 4, 5.
此控制字符串的意思是:
~&
–位于行的开头李>
~{
–在列表上开始迭代~A
–按原则打印每个元素
~^
–打印完最后一个元素后,停在这里,
–为每个其他元素打印一个逗号和一个空格~}
–元素循环结束李>
–在列表末尾打印一个停止点李>
~%
–打印换行符(事实上,当然,CL就是CL,显然可以无缝地向语言中添加一些更结构化的输出控制语言,我相信人们已经这样做了。所以CL在某种意义上已经过了这个阶段:
格式
控制字符串对某些人来说只是一个僵化的remmnant)。有了库,打印字符串:
(ql:quickload "str")
(str:join " " (loop for i from 1 to 5 collect i))
;; "1 2 3 4 5"
更多:
- 迭代入门(循环、迭代、for、series、mapcar):
但我鼓励使用
格式
您可以将format功能与format指令一起使用:
(loop for i from 1 to 5
do
(format t "~A " i))
您的输出:
1 2 3 4 5
~A指令只是一个值的占位符,在本例中是存储在变量i中的值。这类似于Pythons格式函数 哈哈,你认为PHP和JavaScript比CL更成熟吗?@Sylwester不,less:字符串语言是语言长大后所经历的一个阶段。今天哪些编程语言具有这一功能?我不同意开箱即用的字符串语言与语言成熟度之间的相关性,特别是因为它在很大程度上取决于语言的用途,但C#for有字符串插值,例如,
$“{expression}”
。CL总是可以通过自定义宏字符实现任何类型的字符串魔术,所以我想这更多地取决于用户的成熟度。有关等效、成熟、现代和开源的示例,请参见cl interpol。关于它不是一个要求更高的功能的原因,请参阅~?
递归格式指令。@acelent:我的评论是想暗指,而不是字面陈述。显然,知道这件事的人比我想象的要少。
CL-USER 67 > (loop with start = 1 and end = 5
for i from (1+ start) to end
initially (princ start)
do (princ #\space) (princ i))
1 2 3 4 5
NIL