我确定这是一个非常基本的问题,但是如何输出定界值?
(defun q (n)
(if (<= n 2)
1
(+
(q (- n (q (- n 1))))
(q (- n (q (- n 2)))))))
(loop for x from 1 to 25
do (
write (q x)))
上面的代码输出Hofstadter Q序列的前25个项,但它们是串联的:
11233455666888109101111121212121614
可以用逗号,空格或制表符分隔。我曾尝试使用format
函数,但对于像我这样的Lisp新手来说,这已经不知所措了。
答案 0 :(得分:3)
您可以自己编写定界符,例如。 G。 (write ", ")
。您还可以使用(terpri)
编写(取决于平台的)行分隔符。
对于format
,您首先可以了解一些基本用法:
(format <stream> <template> <args…>)
<stream>
是输出应该去的地方。对于标准输出,请使用t
。为了写入文件,您将在此处使用with-open-file
创建的流。<template>
是模板字符串。那只是一个字符串,但是~
字符是特殊的。对于初学者,只需在要插入参数的地方使用~a
。<args…>
与上面~a
所使用的参数一样多。使用这个简单的工具箱,您可以为每个项目执行(format t "~a, " (q x))
。
格式还有很多其他可能性,例如。 G。它可以自己迭代一个列表,执行不同的输出格式和转义,甚至可以通过用户功能扩展。在超级规格中查找(例如,在clhs.lisp.se)。
答案 1 :(得分:2)
使用https://webpack.js.org/guides/hot-module-replacement或实际上是write-char
:
(format t "~D: ~:D~%" x (q x))