今度は不正な値を入力した時にフィボナッチを止めるようにする

昨日schemeでフィボナッチを書いたので今度はhaskell!と思っていたら
また問題が出されました・・・

この条件だと(fib (- 1))とかfib(1.2)で止まらないコードになる

ということで不正な値を入力した時にアラートを返すコードを書こう!
という事になり書いてみました

(define (fib n) 
  (cond ((= n 0) 0)
        ((= n 1) 1)
        ((>= n 2)(+ (fib (- n 1)) (fib (- n 2))))
        (else (display "入力が不正です"))))

そして不正な値を入れて実行してみると

gosh> (fib "hoge")
*** ERROR: Number required, but got "hoge"
Stack Trace:
_______________________________________
gosh> (fib 7)
13

アラートが出て来ない!!!!
なんでアラートが出て来ないか分からなかったのでアドバイスを受けて
とりあえずR5RSの日本語のPDFをDownloadしてnumber?で検索して読みました
なんとなくしか分からなかったけど
もしアラートを出したいのなら書いたフィボナッチのコードを更に
true or falseに分岐させてfalseの場合にアラートを
出すようにしたらいいという事に気付きました
さてココまで分かったけど・・・ってあれれ?????

gosh> (define (fib n) 
  (cond ((= n 0) 0)
        ((= n 1) 1) 
        ((>= n 2)(+ (fib (- n 1)) (fib (- n 2))))
  (else (display "入力が不正です"))))
fib
gosh> (fib 0.2)
入力が不正です#<undef>
gosh> (fib "hoge")
*** ERROR: Number required, but got "hoge"
Stack Trace:
_______________________________________

私的には"hoge"とか文字列を入れても"入力が不正です"って
返ってくると思っていた
だけどNumber required, but got "hoge"のerrorをみると
["hoge"はあったけど数を入れて]と言っているので
"入力が不正です"って返って来なくてもいいのかな???
文字列じゃなくて不正な値を入れたら止まってはいると思うんだけど・・・
いろいろ自信がない。:゚(。ノω\。)゚・。
文字列と数字なのでオブジェクトの型は違うけど
不正な数字入力の場合も不正な文字列を入力の場合も同じように
アラートをを返してこなくちゃダメなのかな?
同じところをホントぐるぐるまわっていました・・・orz