2016-11-04 3 views
1

Как получить продукт каждого подсписника? Пробовал:Как применить функцию к каждому подсписку в схеме или ракетке?

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

но он возвращает: '(3 8) в то время как он должен вернуть' (2 12)

+0

Try '(map (curry apply *) '((1 2) (3 4))) 'вместо. –

+0

thx :) но как это работает? :) – X10D

ответ

6

Вы можете использовать шаблон, соответствующий

(map (λ (xs) (match xs [(list a b) (* a b)])) 
    '((1 2) (3 4))) 

... Или вы может использовать map с лямбдой, которая применяет *, к подписям

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

... Или вы можете использовать curry заменить лямбда

(map (curry apply *) '((1 2) (3 4))) 
+0

excelent :) Вы могли бы порекомендовать ресурс по шаблону? и объяснить линию карри? – X10D

1

петля может быть записана с "именем": пусть

(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) 
Смежные вопросы