手続きを返す手続きを書く


Tags: R6RS, 手続き

Scheme では lambda 式でその場で手続きを作ることができるため、手続きを返す手続きを簡単に作ることができる。例えば、 2 引数の手続きを受け取り、それの第 1 引数と第 2 引数を逆順にして返す手続きは次のように書ける。

(import (rnrs))

(define (flip f)
  (lambda (x y)
    (f y x)))

これを使うと任意の手続きの引数の順序を交換するのに次のように書けるようになる。

(map (flip cons) '(1 3 5 7) '(2 4 6 8)) ; => ((2 . 1) (4 . 3) (6 . 5) (8 . 7))