您将如何编写一个程序,将列表的每个元素与给定的数字 (x) 相乘。如果我给出一个列表 '(1 2 3) 并且 x=3,该程序应返回 (3 6 9)
我的尝试:
(define (mul-list list x)
(if (null? list)
1
(list(* x (car list))(mul-list (cdr list)))))
上面的代码似乎不起作用。我必须做哪些更改?请帮忙
提前致谢。
最佳答案
这是教科书示例,您应该在其中使用 map
,而不是重新发明轮子:
(define (mul-list lst x)
(map (lambda (n) (* x n)) lst))
但我猜您想从头开始实现它。您的代码存在以下问题:
- 您不应将
list
称为参数,因为它与同名的内置过程(您当前正在尝试使用的过程)冲突! - 假设我们正在构建一个列表作为输出,基本情况应该返回一个空列表
- 我们通过
cons
元素构建列表,而不是通过调用list
- 你忘记将第二个参数传递给
mul-list
的递归调用
这应该可以修复所有错误:
(define (mul-list lst x)
(if (null? lst)
'()
(cons (* x (car lst))
(mul-list (cdr lst) x))))
无论哪种方式,它都按预期工作:
(mul-list '(1 2 3) 3)
=> '(3 6 9)
关于scheme - 将项目列表乘以某个数字 'x',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39822470/