LISP 打印到同一行
LISP Printing to Same Line
另一个 LISP 问题,我目前正在尝试编写一个函数,它将 return 一个三角形,其大小将取决于用户的输入
例如:7
aaaaaaa
aaaaaa
aaaaa
aaaa
aaa
aa
a
例如:-3
aaa
aa
a
我已经编写了正整数部分的代码,至少是逻辑,但是我 运行 遇到了障碍。我似乎无法让循环在同一行打印字母。每次循环迭代时,它都会转到下一行。有没有什么办法解决这一问题?我的实现中的任何 comments/suggestions 也将不胜感激,我是 Lisp 的新手。非常感谢大家!你会在下面找到我的代码
(defun triangle (k)
(if (or (= k 1) (= k -1))
(print 'a))
(if (> k 0)
(loop for n from 0 to k
do (print 'a))
(triangle (- k 1))))
(print (triangle 2))
的确,print
打印了一个换行符。 princ
没有。
要进一步控制打印内容的方式,可以使用 format
。它适用于以 ~
开头的指令。因此,~a
(或~A
)从美学角度打印作为参数给出的对象。 ~&
打印换行符。
(format t "~a~&" 'a)
t
用于 *standard-output*
。
见https://lispcookbook.github.io/cl-cookbook/strings.html#structure-of-format
此 link 还解释了如何将字符串向右或向左对齐,您可能需要这样做(如果您走格式路线)。
您可以缩短代码。有make-string count :initial-element character
可以代替循环。一个字符写成#\a
.
此外,只有当 k > 0 (zerop
) 时,您才可以递归调用 triangle。有了这个和 (format t "~a~&" (make-string k :initial-element #\a))
,我的版本只有一次调用打印函数,更少的“if”机制:
(defun my-triangle (k)
(format t "~a~&" (make-string k :initial-element #\a))
(unless (zerop k)
(my-triangle (decf k))))
另一个 LISP 问题,我目前正在尝试编写一个函数,它将 return 一个三角形,其大小将取决于用户的输入
例如:7
aaaaaaa
aaaaaa
aaaaa
aaaa
aaa
aa
a
例如:-3
aaa
aa
a
我已经编写了正整数部分的代码,至少是逻辑,但是我 运行 遇到了障碍。我似乎无法让循环在同一行打印字母。每次循环迭代时,它都会转到下一行。有没有什么办法解决这一问题?我的实现中的任何 comments/suggestions 也将不胜感激,我是 Lisp 的新手。非常感谢大家!你会在下面找到我的代码
(defun triangle (k)
(if (or (= k 1) (= k -1))
(print 'a))
(if (> k 0)
(loop for n from 0 to k
do (print 'a))
(triangle (- k 1))))
(print (triangle 2))
的确,print
打印了一个换行符。 princ
没有。
要进一步控制打印内容的方式,可以使用 format
。它适用于以 ~
开头的指令。因此,~a
(或~A
)从美学角度打印作为参数给出的对象。 ~&
打印换行符。
(format t "~a~&" 'a)
t
用于 *standard-output*
。
见https://lispcookbook.github.io/cl-cookbook/strings.html#structure-of-format
此 link 还解释了如何将字符串向右或向左对齐,您可能需要这样做(如果您走格式路线)。
您可以缩短代码。有make-string count :initial-element character
可以代替循环。一个字符写成#\a
.
此外,只有当 k > 0 (zerop
) 时,您才可以递归调用 triangle。有了这个和 (format t "~a~&" (make-string k :initial-element #\a))
,我的版本只有一次调用打印函数,更少的“if”机制:
(defun my-triangle (k)
(format t "~a~&" (make-string k :initial-element #\a))
(unless (zerop k)
(my-triangle (decf k))))