2009/02/07

[scheme][Gauche]reversed

プログラミングGauche」P.67

 

これは、この発想はなかった。

高階プログラミングが身についてない証拠かも。

 

手続きにリストを逆順に適用する走査手続きを生成する手続き。

(define (reversed walker)
  (lambda (proc ls)
    (walker proc (reverse ls))))

 

(define (tree-walk walker proc tree)
  (walker (lambda (ele)
      (if (list? ele)
        (tree-walk walker proc ele)
        (proc ele)))
    tree))

(tree-walk for-each (lambda (n)(print n)) '(1 (2 3 (4 5)) 6 (7 8 9) 10))
(reversed for-each)
(tree-walk (reversed for-each) (lambda (n)(print n)) '(1 2 3 (4 5 6)))
(reversed map)
(tree-walk (reversed map) (lambda (n)(+ n n)) '(1 2 3 (4 5 6 (7 8 9)) 10))

0 件のコメント:

コメントを投稿