gosh = interactive Gauche

fc9 [0] /root # gosh
gosh> (define (add x y)(+ x y))
add
gosh> (define (mul x y)(* x y))
mul
gosh> (add 2 3)
5
gosh> (mul 2 3)
6
gosh> (define (calc f)(f 2 3))  ;関数を引数にとるcalcを定義
calc
gosh> (calc add) ; 関数addを渡す => (add 2 3)
5
gosh> (calc mul) ; 関数mulを渡す => (mul 2 3)
6
gosh>  (define (calc2 f)(f 9 7))  ;関数を引数にとるcalc2を定義
calc2
gosh> (calc2 add)
16
gosh> (calc2 mul)
63
gosh> (define (add x)(lambda (y)(+ x y))) ; xを引数として受け取り、関数を返す関数 addを定義
add
gosh> (add 3)
#<closure (add add)>
gosh> ((add 3) 5)
8
gosh> ((add 15) 7)
22
gosh>