Hatena::Groupcsnagoya-sicp

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

 | 

2009-06-10喉が痛い

2.33

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

accumulate の定義から考えればそのまま.

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

;; 準備
(define (square x)
  (* x x))

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

;; 答え
(define (map p sequence)
  (accumulate (lambda (x y)
                (cons (p x) y))
              (list)
              sequence))

(define (append seq1 seq2)
  (accumulate cons seq2 seq1))

(define (length sequence)
  (accumulate (lambda (x y)
                (+ 1 y))
              0
              sequence))

;; 確認
(define x (list 1 2 3))
(define y (list 4 5 6))

(display x) (newline) ; => (1 2 3)
(display y) (newline) ; => (4 5 6)
(display (map square x)) (newline) ; => (1 4 9)
(display (append x y)) (newline) ; => (1 2 3 4 5 6)
(display (length x)) (newline) ; => 3
 |