在公共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

为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
而不是
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