我现在开始了解方案的基础知识。我遇到了一个需要创建一个过程的练习,该过程需要在给定 list 的元素之间添加符号或数字的元素 x 。
例如:
过程(tech 7 (list 23 24 25))
将导致(23 7 24 7 25)
。
到目前为止,我只有一种理论方法。它旨在将car
和cdr
中的给定列表进行拆分,并将cdr
与元素 x list 组合>通过append
。
(define (tech x lst)
(if (null? lst)
'()
(cons (car lst) (append (cons ('x) (* 'x (length cdr lst))
(cdr lst)))))
有人可以告诉我代码有什么问题吗?它只返回错误...
答案 0 :(得分:1)
您的代码有几个问题:
append
,大多数情况下,使用cons
是构建列表的正确方法。 'x
乘以列表的长度?那没有任何意义。'x
与x
变量的 value 混淆。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)