scheme - 将方案翻译为 CL

标签 scheme common-lisp porting

我知道一点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)))))

示例 - http://ideone.com/LuG45W

但我需要在 CL 中使用它,而不使用任何宏。你能帮我实现吗?谢谢。

最佳答案

Common Lisp 方案。

    顶层的
  • SCHEME:DEFINECL:DEFUN
  • SCHEME:DEFINE 作为本地定义是 CL:FLETCL: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/

相关文章:

recursion - 合并 2 组间隔

lisp - Common lisp 从字符串中的名称加载包

android - 适当的转换 VerdeActivity 错误

c++ - 将 Symbian C++ 移植到 Android NDK

java - 如何使用 runnable 将 java 命令模式迁移到 PHP 7.4?

vector - 求向量的第二小值

arrays - Scheme 语言中的 3D 数组

scheme - 如何实现 let* in scheme?

string - 将字符串拆分为单个字符

lisp - 剪辑 : variable has no value