在Common Lisp中将数字与空格连接起来?

时间:2019-03-10 20:24:32

标签: lisp common-lisp whitespace

为Lisp程序编写一个简单的循环,我希望我的数字在它们之间以空格打印,

(loop for i from 1 to 5
      do 
      (prin1  i))

打印:

12345

id喜欢它打印:

1 2 3 4 5

但是我找不到任何地方打印空白的任何信息。任何帮助表示赞赏!

5 个答案:

答案 0 :(得分:5)

所有足够成熟的编程语言都经过将另一种编程语言嵌入字符串中的阶段,通常是为了控制打印输出。 真的成熟的编程语言已过了这一阶段:CL尚未成熟,仍然具有// roughly equivalent to the snippet with checkInfo above class Foo { constructor() { this.info = 'A Foo instance'; } checkInfo() { console.log(this.info); } } const f = new Foo(); f.checkInfo();控制字符串。您可以用这些东西做各种各样的事情。

您的示例的一个略微变体是让FORMAT打印列表:

FORMAT

此控制字符串的含义是:

  1. > (format t "~&~{~A~^, ~}.~%" '(1 2 3 4 5)) 1, 2, 3, 4, 5. –在行的开头;
  2. ~& –在列表上开始迭代;
  3. ~{ –与~A一样打印每个元素;
  4. PRINC –打印完最后一个元素后,在此处停止;
  5. ~^ –为其他每个元素打印一个逗号和一个空格;
  6. , –元素上的循环结束;
  7. ~} –在列表的末尾显示停止符;
  8. . –打印换行符。

这是一个使用FORMAT control strings的相对简单的示例:可以做一些相当繁琐的事情。


(实际上,CL当然是CL,显然可以在该语言中无缝添加一些结构化的输出控制语言,而且我相信人们已经做到了。因此CL在某种意义上已经走过了舞台: ~%控制字符串在某些人看来只是僵化的残骸。

答案 1 :(得分:4)

使用库,打印字符串:

(ql:quickload "str")
(str:join " " (loop for i from 1 to 5 collect i))
;; "1 2 3 4 5"

https://github.com/vindarel/cl-str/

更多:

但是我鼓励使用format

答案 2 :(得分:3)

您将需要自行打印空白。代码的简单扩展:

(loop for i from 1 to 5
      do (princ i)
         (princ #\space))

(请注意,我使用的是princ而不是prin1。)

答案 3 :(得分:1)

您可以将format函数与format指令一起使用:

import os
import cv2
path = r"C:\Users\Desktop\att_faces"
directory = []
directory = [x[1] for x in os.walk(path)]
non_empty_dirs = [x for x in directory if x]


directory = [item for subitem in non_empty_dirs for item in subitem]

您的输出:

(loop for i from 1 to 5
      do
      (format t "~A " i))

〜A指令只是一个值的占位符,在这种情况下,值存储在变量i中。这类似于Python的格式功能。

答案 4 :(得分:1)

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