如何在方案列表的元素之间包含相同的元素(nbr。或符号)?

How to include the same element (nbr. or symbol) between the elements of a list in scheme?

我现在正在开始学习 scheme 的基础知识。我遇到了一个练习,其中需要创建一个过程,该过程在给定 list[=31= 的元素之间添加可以是符号或数字的元素 x ].

例如:

程序 (tech 7 (list 23 24 25)) 应产生 (23 7 24 7 25)

到目前为止,我只有一个理论方法。它旨在拆分 carcdr 中的给定列表,并将 cdr 与元素 [=27= 的新创建的 list 组合]xappend.

(define (tech x lst)
  (if (null? lst)
      '()
      (cons (car lst) (append (cons ('x) (* 'x (length cdr lst))
                                    (cdr lst)))))

有人能告诉我代码有什么问题吗?它只有 returns 个错误...

您的代码存在几个问题:

  • 您应该避免使用 append,大多数时候使用 cons 是构建列表的正确方法。
  • 为什么要将 'x 乘以列表的长度?这没有任何意义。
  • 您将 符号 'xx 混淆了]变量.
  • 您需要考虑处理最后一个元素的第三种情况,因为列表不以 x.
  • 结尾
  • 最后但同样重要的是:你忘了调用递归!如果您在 tech.
  • 中省略对 tech 的调用,它将永远无法工作

这解决了所有问题,大部分原始代码必须重写:

(define (tech x lst)
  (cond ((null? lst) '())       ; base case: empty list
        ((null? (cdr lst)) lst) ; list with a single element
        (else (cons (car lst)   ; this is how we add
                    (cons x     ; the element to the list
                          (tech x (cdr lst))))))) ; advance recursion

它按预期工作:

(tech 7 '(23 24 25))
=> '(23 7 24 7 25)