如何将函数应用于方案或球拍中的每个子列表?

时间:2016-11-04 00:27:49

标签: functional-programming scheme racket

如何获取每个子列表的产品? 尝试:

(apply map * '((1 2) (3 4)))

但它返回:'(3 8) 虽然它应该返回'(2 12)

2 个答案:

答案 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)