1

R5RS(インラケット)を使用しています。これが私の例です

(map (lambda (x) (list (apply + x) (apply * x))) '((1 2 3) (4 5 6)))
 -> ((6 6) (15 120))

このような組み込み関数があるかどうか疑問に思っていました

(map-apply '(+ *) '((1 2 3) (4 5 6)))

これは同じ結果をもたらす可能性があります。

4

3 に答える 3

6

組み込みのものはありませんが、独自に作成できます。

(define (map-apply funcs items)
  (map (lambda (item)
         (map (lambda (func)
                (apply func item))
              funcs))
       items))

ただし(list + *)、 ではなくを渡す必要があります。'(+ *)

于 2013-06-21T10:48:26.003 に答える
0

この種のことを頻繁に行う場合は、マップ関数の生成を抽象化できます。したがって、残りは変更されません。

;; Makes a function that applies all functions to an argument
(define (make-map-fun . funs)
  (lambda (lis)
     (map (lambda (fun) (apply fun lis)) funs)))

(map (make-map-fun + *) '((1 2 3) (4 5 6)))
; ==> ((6 6) (15 120))

;; And you can zip with it too
(apply map 
       (lambda l ((make-map-fun + *) l)) 
       '((1 2 3) (4 5 6) (7 8 9))) 
; ==> ((12 28) (15 80) (18 162))
于 2013-06-21T23:34:46.540 に答える