2008年08月21日

Schemeでlambda式を書く

 lambda式を使用することで、無名関数を作成することができる。

一般形
(lambda (引数1 引数2 ・・・ 引数n) (式))
> (lambda (x) (* x x)) ;xの2乗を返す無名関数
#<procedure>
lambda式の基本的な呼出し
 関数を呼び出す場合、通常はその関数名を指定することで呼び出すが、 無名関数の場合は、そもそも関数名が存在しないため、通常の関数のように呼び出すことはできない。 lambda式で作成した無名関数を呼び出すには以下のように記述する。
> ((lambda (x) (* x x))3) ;xの2乗を返す無名関数
9
define式とlambda式
 以下のdefine式は、ラムダ式で定義された関数がsquareという名前になる。
; xの2乗を返す
(define square
  (lambda (x) (* x x)))
 したがって、上記のdefine式は以下のdefine式と同様の動作を行う。
; xの2乗を返す
(define (square x)
  (* x x))
lambda式を引数に指定する
 Schemeでは、関数の引数に関数を指定できる。(高階関数)
lambda式を引数として渡した場合、呼び出された側の仮引数によって lambda式に名前がつけられる。
; val1の2乗とval2の2乗の和を返す
(define (lambda-test val1 val2)
  (double-add (lambda (x) (* x x)) val1 val2))

; (lambda (x) (* x x))にfuncという名前がつけられる
(define (double-add func val1 val2)
  (+ (func val1) (func val2)))

; 実行例
> (lambda-test 2 3)
13


ラベル:scheme
posted by Kojo Sugita at 20:11| Comment(0) | TrackBack(0) | Scheme | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。