如何在方案列表的元素之间包含相同的元素(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)
。
到目前为止,我只有一个理论方法。它旨在拆分 car
和 cdr
中的给定列表,并将 cdr
与元素 [=27= 的新创建的 list 组合]x 到 append
.
(define (tech x lst)
(if (null? lst)
'()
(cons (car lst) (append (cons ('x) (* 'x (length cdr lst))
(cdr lst)))))
有人能告诉我代码有什么问题吗?它只有 returns 个错误...
您的代码存在几个问题:
- 您应该避免使用
append
,大多数时候使用 cons
是构建列表的正确方法。
- 为什么要将
'x
乘以列表的长度?这没有任何意义。
- 您将 符号
'x
与 x
的 值 混淆了]变量.
- 您需要考虑处理最后一个元素的第三种情况,因为列表不以
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)
我现在正在开始学习 scheme 的基础知识。我遇到了一个练习,其中需要创建一个过程,该过程在给定 list[=31= 的元素之间添加可以是符号或数字的元素 x ].
例如:
程序 (tech 7 (list 23 24 25))
应产生 (23 7 24 7 25)
。
到目前为止,我只有一个理论方法。它旨在拆分 car
和 cdr
中的给定列表,并将 cdr
与元素 [=27= 的新创建的 list 组合]x 到 append
.
(define (tech x lst)
(if (null? lst)
'()
(cons (car lst) (append (cons ('x) (* 'x (length cdr lst))
(cdr lst)))))
有人能告诉我代码有什么问题吗?它只有 returns 个错误...
您的代码存在几个问题:
- 您应该避免使用
append
,大多数时候使用cons
是构建列表的正确方法。 - 为什么要将
'x
乘以列表的长度?这没有任何意义。 - 您将 符号
'x
与x
的 值 混淆了]变量. - 您需要考虑处理最后一个元素的第三种情况,因为列表不以
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)