lambda式でほげほげするぞ。
lambdaは無名関数を作ってくれる感じ。
gosh> (lambda () 10) ; lambdaは「引数を取らず、10を返す無名関数」を返す #<closure 009DDE00()> gosh> ((lambda () 10)) ; lambdaが生成した無名関数を評価 10 gosh> ((lambda (x) (+ x 1)) 30) ; 引数に+1する関数に30を与えて評価 31 gosh> (define inc (lambda (x) (+ x 1))) ; defineで、lambdaが生成した無名関数をincと定義 inc gosh> (inc 22) 23 gosh> (define (inc x) (+ x 2)) inc gosh> (inc 22) 24
(define function (lambda (arg1 arg2 ...) (...)))
は(define (function arg1 arg2 ...) (...))
と省略して書くことができる。俺はなんか好かんから使わない方向性。
ちょっと定番の階乗でも書いてみよう
gosh> (define pow (lambda (x) (if (= x 1) 1 (* x (pow (- x 1)))))) pow gosh> (pow 3) 6 gosh> (pow 5) 120 gosh> (pow 3.1) ;無限ループ!!
ちょっとリストとかと組み合わせてほげらせてみよう。
gosh> (define sum (lambda (lst) (if (null? lst) 0 (+ (car lst) (sum (cdr lst)))))) sum gosh> (sum '(0 1 2 3 4)) 10 gosh> (sum '(0 1 2 3 4 100 1)) 111 gosh> (map - '(3 4) '(1 2)) ; mapは与えられた演算を引数のリストの全要素に対しておこなう (2 2) gosh> (map - '(3 8) '(1 2)) (2 6)