我正在尝试使用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,但是显然我做错了……我将非常感谢您提供有关如何将其包含在一对内的值的任何帮助。
和e'(1 2 y(3 of 4)= 1 * 2 * 3 * 4
您快到这里了,只是错过了清单?测试:
(define (mult lst)
(if (null? lst)
1
(let ((ca (car lst)))
(cond
((number? ca) (* ca (mult (cdr lst))))
((list? ca) (* (mult ca) (mult (cdr lst))))
(else (mult (cdr lst)))))))
编辑
他是不让的等效版本:
(define (mult lst)
(cond
((null? lst) 1)
((number? (car lst)) (* (car lst) (mult (cdr lst))))
((cons? (car lst)) (* (mult (car lst)) (mult (cdr lst))))
(else (mult (cdr lst)))))
如您所见,(car lst)可能会被多次评估,因此我在第一个版本中使用let来避免这种情况。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句