Hatena::Groupcsnagoya-sicp

クラなんとかの日記 このページをアンテナに追加 RSSフィード

 | 

2009-06-11準備会

2.36

| 2.36 - クラなんとかの日記 を含むブックマーク はてなブックマーク - 2.36 - クラなんとかの日記 2.36 - クラなんとかの日記 のブックマークコメント

accumulate-n を実装する.

seqs の car を accumulate していき,cdr を accumulate-n すればよい.

#!/usr/bin/env gosh
;; -*- coding: utf-8; -*-
; 

;; 準備
(define (accumulate op initial sequence)
  (if (null? sequence)
      initial
      (op (car sequence)
          (accumulate op initial (cdr sequence)))))

;; 答え
(define (accumulate-n op init seqs)
  (if (null? (car seqs))
      (list)
      (cons (accumulate op init (map car seqs))
            (accumulate-n op init (map cdr seqs)))))

;; 確認
(define s (list (list 1 2 3) (list 4 5 6) (list 7 8 9) (list 10 11 12)))

(display s) (newline) ; ((1 2 3) (4 5 6) (7 8 9) (10 11 12))
(display (accumulate-n + 0 s)) (newline) ; (22 26 30)
 |