scheme - 将项目列表乘以某个数字 'x'

标签 scheme lisp racket multiplication cdr

您将如何编写一个程序,将列表的每个元素与给定的数字 (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/

相关文章:

list - 删除列表(方案)中的空白元素

emacs - aquamacs 上常见的 lisp 自动完成

recursion - 如何在Racket或Scheme中使用递归来自动执行重复性任务?

scheme - DrRacket EOPL 方案输出

使用记忆化计算组合 nCk 的方案

lisp - funcall函数报错cannot take car lisp

functional-programming - SICP 示例不适用于 Racket

concurrency - Racket 中的管道与异步 channel

scheme - Scheme中的延续(call/cc)

scheme - 如何图案匹配 'letrec'