関数型プログラミング言語Haskell Part4
■ このスレッドは過去ログ倉庫に格納されています
0685デフォルトの名無しさん
2006/05/01(月) 11:13:45bsearchの最後の等式で、再帰的に呼ばれたbsearchが-1を返したときにまずいことになる。
これを防ぐには、結果が-1かどうかを明示的にテストすればいい。
bsearch k [] = -1
bsearch k x
| median x > k = bsearch k (take (middle x) x)
| median x == k = middle x
| median x < k = case bsearch k (drop ((middle x)+1) x) of
-1 -> -1
r -> middle x + 1 + r
以下、本題とは関係ないけど、
・Haskellではbsearchのような「失敗する可能性のある」関数の結果はMaybeでラップするのが普通。
失敗時に-1を返すよりNothingを返した方が直感的だし、間違いも少ない。
・ceiling (fromIntegral (length x) / fromIntegral 2) は div (length x) 2と書ける。
■ このスレッドは過去ログ倉庫に格納されています