Gaucheのvariableとprocedure
procedureは、『プログラミングGauche』.iconでは「手続き」と呼んでる
関数のことmrsekut.icon
boolを返すprocedureの名前はsufixに?をつけるっぽい
rbと同じ
e.g. odd?, null?
変数束縛
code:lisp
(define sqrt2 (sqrt 4)) ; sqrt2 = sqrt 4
code:lisp
(define (pythagoras x y) (sqrt (+ (* x x) (* y y))))
procedureの中でprocedureの定義
code:lisp
(define (max-number lis)
(define (pick-greater a b)
(if (> a b) a b))
(fold pick-greater -inf.0 lis))
無名関数
code:lisp
(lambda (a b) (+ a b))
((lambda (a b) (+ a b)) 1 2)
local変数
(let ((変数定義) (変数定義) ..) (式))
例
code:lisp
(let ((a 3)
(b 4))
(+ (* a a) (* b b)))
((lambda (a b) (+ (* a a) (* b b))) 1 2)と同じ
letの方が見やすい
Haskellのlet..inと同じ
代入
set!を使って変数に値を代入する
その値はすでに定義済みでないといけない
code:gauche
(define x 3)
(set! x (list 1 2))
x ; 3
debugっぽいやつ
関数中に#?=を仕込めば、そこを通過するたびにその式の評価値が出力される
code:lisp
(define (folda proc init lis)
(if (null? lis)
init
(folda proc (proc (car lis) init) #?=(cdr lis)))) 変数名の慣習
/は「with」と読み替える
例えばhoge/piyoは、「hoge with piyo」
call with current continuation