【问题标题】:Trying to append recursively, what am I doing wrong in Scheme?尝试递归追加,我在方案中做错了什么?
【发布时间】:2020-02-10 17:29:27
【问题描述】:

尝试递归地将列表 a 中的每个元素附加到列表 c。目前只有一个元素被附加。我究竟做错了什么?我',试图颠倒一个列表。但目前无法理解如何将一个列表附加到另一个列表。

(define a '(1 2 3))
(define c '())

(define fun
    (lambda (() l1) l1
            (l l1) (append l1 (car l)) (fun (cdr l) l1)
))

(fun a c)

我正在使用解释器之类的方案,除了 listfunctions 之外,我不能使用任何新的内置函数。

【问题讨论】:

  • 查看 Scheme 语法并与您的 Lambda 表单进行比较。
  • 这种类似于 Scheme 的语言并不广为人知。它似乎是特定于你正在学习的任何课程。
  • 我认为,为了让人们有希望回答您的问题,您需要参考您正在使用的实现,它与标准方案相去甚远。特别是提供一个指向文档实现的指针将是一个好的开始。
  • 除非你的语言是这样的 append 是破坏性的(通常不是),你的函数的结果只是 (fun (cdr l) l1),如果你需要使用 (append l1 (car l))希望它成为结果的一部分。

标签: scheme lisp


【解决方案1】:

你需要使用

(lambda (l l1)
 (if (null? l)
     l1
     (append l1 (car l)) (fun (cdr l) l1)))

如果有模式匹配工具,你写的内容看起来会起作用,但我们的 lambda 更基本,不匹配模式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    相关资源
    最近更新 更多