【问题标题】:What does this Scheme code do?这个 Scheme 代码有什么作用?
【发布时间】:2015-07-19 00:55:50
【问题描述】:

特别是为什么我们要使用tailr 和headr?我无法理解。

(define (foo lst)
  (cond
    ((not (list? lst)) lst)
    ((null? lst) lst)
    (else (let* ((tail (cdr lst))
                 (head (car lst))
                 (tailr (foo tail))
                 (headr (foo head)))
            (append tailr (list headr))))))

【问题讨论】:

  • Tail、head、tailr、headr 只是中间变量。整个 let* 块可以写成(append (foo (cdr lst)) (list (foo (car lst))))
  • 这是作业还是考试题?这是一年中的那个时候,虽然我没有看到它在任何地方发布在网上,但我确实看到有人在 ideone 中输入了代码,以及ideone.com/fork/hqywYX;他们可以通过运行它看到它实际做了什么。
  • 运行它...它递归地反转列表(也适用于嵌套列表)。 tailrheadr 只是局部变量。

标签: scheme let


【解决方案1】:

相当于:

(define (reverse-nested lst)
  (cond ((not (pair? lst)) lst)
        (else (reverse (map reverse-nested lst)))))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    相关资源
    最近更新 更多