テスト
予定通りgauche.testで遊んでみようかと
(test* "hoge" expected test-code &opt cmp-fn)
思ったんだけどまあ当たり前のように当たり前。
メインは例外処理か。
(guard (e ((cond1) v1) ((cond2) v2) ( else default-case)) (body))
最初 ZERO DIVIDEひっかかるかと思って、
gosh> (guard (e (else e)) (/ 1 0)) +inf.0
おわっ、とのけぞる。すばらしい過ぎる。
gosh> (guard (e (else e)) (read)) ) #<read-error "Read error at "(stdin)":line 2 ..."> gosh>
error, raiseで例外を投げる、と。なるほど。
gosh> (define (div a b) (if (= b 0) (error "zero divide" (list '/' a b)) (/ a b))) div gosh> (div 10 3) 10/3 gosh> (div 10 0) *** ERROR: zero divide (/ a 0) Stack Trace: _______________________________________ gosh> (raise (make <error> :message "hoge")) *** ERROR: hoge Stack Trace: _______________________________________
んでこのコンディションって何者?とか
gosh> (guard (e (else (class-of e))) (div 10 0)) #<class <error>> gosh> (guard (e (else (class-of e))) (read)) ) #<class <read-error>> gosh> (guard (e (else (class-of e))) (car 3)) #<class <error>>
わあ、とびっくり(ちとわざとらしいか)
ほかにどんなのがあるんだろう?
#というか総称関数とクラスに進みたくなってくる。