関数型プログラミング言語ML
■ このスレッドは過去ログ倉庫に格納されています
0634デフォルトの名無しさん
NGNG"tl(L) = nil" のところで = で比較しちゃってるので L の要素が
equality type でなきゃいけない。で、real は同値判定「できない」
ことになってるんでこういうエラーがでる。
こういうときは null 関数とかパターンマッチを使おう。
sml 使いが一度はハマル FAQ だね。
あと、632 のプログラムだと list_max(tl(L)) を2回計算してるんで
値の順序によっては30要素くらいでもう値が返ってこなくなるよ。
ちゃんと let とかを使おう。
fun list_max [x : real] = x
| list_max (hd::tl) =
let val tl_max = list_max tl
in
if hd > tl_max then hd else tl_max
end;
元のスタイルのままパターンマッチにしてみた。
ちなみに、real list 同士が比較できない理由だけど、
[1.0] = [1.0] を判定するためには 1.0 = 1.0 の判定が必要だよね。
real 同士が = 比較できないんだからこれは無理。
nil の場合だけ特別扱い……なんてことはしてくれない。
■ このスレッドは過去ログ倉庫に格納されています