如何获取每个子列表的产品? 尝试:
(apply map * '((1 2) (3 4)))
但它返回:'(3 8) 虽然它应该返回'(2 12)
答案 0 :(得分:6)
您可以使用模式匹配
(map (λ (xs) (match xs [(list a b) (* a b)]))
'((1 2) (3 4)))
...或者您可以将map
与*
应用于子列表的lambda一起使用
(map (λ (xs) (apply * xs))
'((1 2) (3 4)))
...或者您可以使用curry
替换lambda
(map (curry apply *) '((1 2) (3 4)))
答案 1 :(得分:1)
循环可以用"名为let":
编写(define (f l)
(let loop ((l l)
(ol '()))
(cond
[(empty? l) (reverse ol)]
[else (loop (rest l)
(cons (apply * (first l)) ol))])))
(f '((1 2) (3 4)))
输出:
'(2 12)