将项目列表乘以一定数量 'x'
multiplying list of items by a certain number 'x'
您将如何编写将列表的每个元素与给定数字 (x) 相乘的过程。如果我给出一个列表 '(1 2 3) 并且 x=3,该过程应该 return (3 6 9)
我的尝试:
(define (mul-list list x)
(if (null? list)
1
(list(* x (car list))(mul-list (cdr list)))))
上面的代码似乎不需要 work.What 我必须做的更改?请帮助
提前致谢。
这是教科书示例,您应该在其中使用 map
,而不是重新发明轮子:
(define (mul-list lst x)
(map (lambda (n) (* x n)) lst))
但我猜您想从头开始实施它。您的代码存在以下问题:
- 你不应该调用
list
参数,它与同名的内置过程 - 你当前正在尝试使用的过程冲突!
- 基本情况应该return一个空列表,因为我们正在构建一个列表作为输出
- 我们通过
cons
ing 元素构建列表,而不是通过调用 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)
对于及其扩展(对于*、for/list、for/first、for/last、for/sum、for/product、for/and、for/or 等:https://docs.racket-lang.org/reference/for.html) 对于 Racket 中的循环非常有用:
(define (ml2 lst x)
(for/list ((item lst))
(* item x)))
测试:
(ml2 '(1 2 3) 3)
输出:
'(3 6 9)
我发现在很多情况下,'for' 实现提供了简短、简单且易于理解的代码。
您将如何编写将列表的每个元素与给定数字 (x) 相乘的过程。如果我给出一个列表 '(1 2 3) 并且 x=3,该过程应该 return (3 6 9)
我的尝试:
(define (mul-list list x)
(if (null? list)
1
(list(* x (car list))(mul-list (cdr list)))))
上面的代码似乎不需要 work.What 我必须做的更改?请帮助
提前致谢。
这是教科书示例,您应该在其中使用 map
,而不是重新发明轮子:
(define (mul-list lst x)
(map (lambda (n) (* x n)) lst))
但我猜您想从头开始实施它。您的代码存在以下问题:
- 你不应该调用
list
参数,它与同名的内置过程 - 你当前正在尝试使用的过程冲突! - 基本情况应该return一个空列表,因为我们正在构建一个列表作为输出
- 我们通过
cons
ing 元素构建列表,而不是通过调用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)
对于及其扩展(对于*、for/list、for/first、for/last、for/sum、for/product、for/and、for/or 等:https://docs.racket-lang.org/reference/for.html) 对于 Racket 中的循环非常有用:
(define (ml2 lst x)
(for/list ((item lst))
(* item x)))
测试:
(ml2 '(1 2 3) 3)
输出:
'(3 6 9)
我发现在很多情况下,'for' 实现提供了简短、简单且易于理解的代码。