【发布时间】:2013-09-21 21:06:48
【问题描述】:
我正在尝试使用 Scheme 编写代码(函数):
- 将任意大小的列表作为参数
- 将列表中的每个数字相乘
- 应跳过符号
- 对中的值应包含在乘法中
换句话说,结果应该如下:
> (mult '(1 2 3))
6
> (mult '(1 2 x 3 4))
24
> (mult '(1 2 z (3 y 4)))
24 (mine gives me 2)
我的代码允许我跳过符号并将所有内容相乘。但是,一旦我在列表中包含一对,它就好像它不是一个数字,因此就好像它不存在一样。这是我的代码:
(define mult
(lambda (x)
(if (null? x)
1
(if(number? (car x))
(* (car x) (mult (cdr x)))
(mult(cdr x))))))
我尝试在找到一对时使用 append,但显然我做错了...任何关于如何让它在一对中包含值的帮助将不胜感激。
即'(1 2 y (3 z 4) = 1 * 2 * 3 * 4
【问题讨论】:
-
这对可以嵌套多深?有可能有这样的清单吗?
'(((1)) 2)
标签: list recursion scheme multiplication