2013-05-22 9 views
7

学校から正しく覚えていれば、 "まだ実装されていません"が使用されていますが、コードがコンパイルされる関数またはキーワードがあります。私はそれを検索しようとしましたが、見つけることができません。誰が私が探しているものを知っていますか?"操作なし" haskell

bottom

底が何かを示すためだけのものではありませんどのようなあなたが考えていると呼ばれている

isDivisor :: Integer -> Integer -> Bool 
isDivisor x y = None 
--isDivisor x y = (rem x y) == 0 
+1

'未定義'を使用してください。この関数を呼び出すと、 '*** Exception:Prelude.undefined'が得られます。 –

+1

あるいは、isDivisor x y = error "まだ実装されていません"、またはghciをループさせたい場合は 'isDivisor x y = isDivisor x y'です。 –

答えて

8

のようなものですですが実装されていない、私たちのプログラムの原因となる計算を表現するためのものです失敗する。私たちは実際に無限ループとして自分自身をundefinedを定義することができます例えば

undefined = let x = x in x 
undefined = undefined 

だから、本当に私たちがちょうど原因になりますか、プログラムがクラッシュしたり、ループ永遠に、決してする値undefined :: aに入れてやっていますそれを評価する。あなたはあなたがちょうどこのtypechecksので、この

foo :: Bar -> Baz -> Quux 
foo bar baz = foo bar baz 

を行うことができ実装する方法がわからないいくつかの大きなと複雑な機能を持っている場合

したがって、それは、コンパイルだろうと我々は我々の他の部分をテストすることができますプログラム。

しかし、誤ってプログラムのその部分を実行したときに無限ループを起こすことは、役に立たないので、GHCなどはundefinedを別の方法で実装します。

-- In GHC 
error msg = throw (ErrorCall s) 
undefined = error "Prelude.undefined" 

だから、より良いデバッグ機能あなたは下の混乱、HAMMARの概念を発見している場合

foo bar baz = undefined 
foo bar baz = error ("Tried to evaluate foo with" ++ show bar ++ show baz) 

で未定義の機能を残して:彼らは、例えば、プログラムがクラッシュし、エラーメッセージを発してい投稿された偉大なanswer

関連する問題