我正在尝试在给定列表中产生偶数乘积。 我正在尝试复制以下示例:
示例: (乘积偶数'(2 1 6 3 5)) ==> 12
这是我的乘积偶数定义版本:
(define (product-even-numbers lst)
(define/match (recurse lst accumulator)
;; A _ pattern matches any syntax object
[(_ _) (* car (recurse cdr))])
(recurse lst 1))
我遇到以下错误:
(product-even-numbers '(2 1 6 3 5))
. . recurse: arity mismatch;
the expected number of arguments does not match the given number
expected: 2
given: 1
arguments...:
我知道我缺少第二个参数,但是我不知道第二个参数应该是什么。
答案 0 :(得分:1)
为什么要使用模式匹配?如果没有它,这将更容易理解,首先,您需要获得递归和正确的逻辑:
(define (product-even-numbers lst)
(define (recurse lst acc)
(cond ((null? lst) acc)
((even? (car lst)) (recurse (cdr lst) (* (car lst) acc)))
(else (recurse (cdr lst) acc))))
(recurse lst 1))
在这种情况下,很明显第二个参数是我们到目前为止的累积产品。我们需要考虑三种情况:空列表,偶数元素,奇数元素。例如:
(product-even-numbers '(2 1 6 3 5))
=> 12
答案 1 :(得分:0)
(define (product-even-numbers lst)
(local [(define tmp (foldr * 1 (filter even? lst)))]
(if (= 1 tmp) 'nothing tmp)))
如果输出1表示没有任何偶数。
(define (product-even-numbers2 lst)
(foldr * 1 (filter even? lst))) ; or use (apply * (filter even? lst))