我知道一点Scheme(很久以前读过SICP),写了这个程序:
(define (prl k m)
(define (print-line n)
(cond ((> n 0) (display n)
(print-line (- n 1)))
(else (newline))))
(print-line k)
(cond ((> m 1) (prl (+ k 1) (- m 1)))))
但我需要在 CL 中使用它,而不使用任何宏。你能帮我实现吗?谢谢。
最佳答案
Common Lisp 方案。
-
顶层的
SCHEME:DEFINE
是CL:DEFUN
。SCHEME:DEFINE
作为本地定义是CL:FLET
或CL:LABELS
。- CL 默认情况下并且按标准不是尾部调用优化。这意味着最好使用 a) TCO 支持实现并指导编译器执行此操作,或者 b) 在必要/可能的情况下使用循环。另请注意,大多数解释器不会在 Common Lisp 中执行 TCO,即使编译器可能支持它。
所以代码将是:
(defun prl (k m)
(flet ((print-line (n)
(loop for i downfrom n downto 1 do (write i))
(terpri)))
(loop for i from k
repeat m
do (print-line i))))
关于scheme - 将方案翻译为 CL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16761143/