エラーの種類
構文のエラー
構文がおかしいとき。
# let x 3 ;; Error: Syntax error
変数を宣言してるのに「=」がない。「;;」にアンダーラインが現れる。
他にも、if文でthenが無いとか、()の対応がおかしい場合はこれ。
未定義の変数
# 3 + a ;; Error: Unbound value a
定義してない変数を使うと、当然怒られる。
また、「let」を「lat」みたいに恥ずかしい感じにすると「lat」という変数と解釈されて
同様のエラーになる。
型エラー
# 3 + 2.5 ;; Error: This expression has type float but is here used with type int
int + floatのように型が合ってない場合。
当然、「3.0 + 2.5」も同様に怒られる。
以下、関数に渡す引数の数が正しくない時の怒られ方。
# calcBMI 1.7 65 100 ;; Error: This function is applied to too many arguments, maybe you forgot a `;'
実行時のエラー
プログラムの構文としては問題ないけど、実行を継続できない場合。
# 3 / 0 ;; Exception: Division_by_zero.
「Exception」なので、厳密にはエラーではなく「例外」
論理的なエラー
そもそも、アルゴリズムが間違ってる場合。
この場合は、エラーが出ないということもあるので注意が必要。
いまのところ、私的に多いのは「型エラー」ですかね。
floatを返す関数funに対して
if fun x < 18
のような条件をよく書いてしまい怒られるのです。
まだ、型をちゃんと意識できてないんだろうなー。