Lisp打高尔夫球的秘诀


9

这些关于在Lisp(任何方言)打高尔夫球的一般提示是什么?请为每个答案张贴一个提示,并且仅针对Lisp的方言提供答案(例如,“删除评论”不是答案)。

请张贴您的小费适用于Lisp的方言。



1
您是否认为这些将不同于Scheme和Racket中打高尔夫球技巧
Alex A.

1
我建议您使用tinylisp(Lisp的较小精简版本)来打高尔夫球。
ckjbgames

Answers:


4

对函数参数进行排序以最小化空白

代替

(defun f(a b)(...))
...
(f x(1+ y))

尝试像

(defun f(b a)(...))
...
(f(1+ y)x)

1

通过打印原子来打印由大写字母组成的字符串

princCommon Lisp中的功能很短,它将打印没有转义字符的对象。如果您打印具有synax的Common Lisp符号,则可以避免'symbol-name在您要打印的内容周围加上引号,并且还可以节省空白。请注意,在打印符号时,它们将大写。另外,它不会添加换行符或空格,因此您不需要串联。

例如,

(princ'hai)

将打印HAI

(princ'hai)(princ(read))

将打印HAI,要求输入,然后将其打印出来,例如,如果您键入hello,则结果为

HAIhellohello


1

使用loopformat,就像printf在类固醇上一样。format包括迭代和条件,以及罗马数字,英文数字和英文复数。它非常非常丑陋,而且非常紧凑。


1

条件输出

GNU Common Lisp

~v^

向上和出指令~^是最常用的格式化操作的最后一个列表项后,终止列表中使用。但是,它也可以与v修饰符一起使用以使用参数,在这种情况下,如果该参数为零,它将终止。这对于处理由产生的零特别有用dotimes

(loop as n from 1 to 10 do(format t"~d~%"n))

(dotimes(n 11)(if(> n 0)(format t"~d~%"n)))

(dotimes(n 11)(format t"~v^~d~%"n n))

format(condition)

的第一个参数format可以是tnilaka ()或流中的一个。如果传递了t,则将输出到stdout,如果nil它将格式化后的输出作为字符串返回。可以有条件地使用它。上面的示例可以写成如下简短形式:

(dotimes(n 11)(format(> n 0)"~d~%"n))

如果输出了值,则返回值为nil。因此,它也可以用作do循环的终止条件:

(do((n 11))((<(decf n)1))(format t"~d~%"n))

(do((n 11))((format(>(decf n)0)"~d~%"n)))

~[...~]

条件格式化程序使用一个参数,然后从索引列表中选择一个格式化字符串。一个常见的用例是使用默认格式化程序~:;在零与非零之间进行选择。

(dotimes(n 11)(format t"~v^~[~r~:;~d~]~%"n(mod n 3)n))

条件格式器也可以嵌套,在这种情况下,每个格式器将依次使用一个参数。


~&

在上面的每个示例中,~%用于发出换行符。在大多数情况下,可以用文字换行符代替。另一个选择是使用~&,当且仅当输出光标不在行的开头(也称为a)时,它才会发出换行符fresh-line

二者~%~&还可以采取一个参数,与v改性剂或作为恒定,并且将产生尽可能多的换行。他们还将高兴地接受否定论点,在这种情况下,他们什么也不会发出。


外部参考

实用的Lisp18
。一些格式食谱

Common Lisp语言,第二版
22.3.3。格式化输出到字符流

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.