7

インターネットで and の定義を見つけましたが、and の実際の実装を見つけることができませんでした。コンピューターである種のプレリュード Haskell ファイルを検索しましたが、テキスト エディターで開くことができるものは何も返されませんでした。

4

3 に答える 3

19

次のように、 Hoogleを使用して Haskell 関数を検索できます。

http://www.haskell.org/hoogle/?hoogle=and

関数リンクは、関数が定義されたライブラリ モジュールに移動します。この場合、リンクは次の場所に移動andします。

http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#v:および

次にSource、関数名の右側にあるリンクをクリックすると、その関数のソースに移動します。その場合は、次のandリンクを参照してください。

http://hackage.haskell.org/packages/archive/base/latest/doc/html/src/GHC-List.html#and

and                     :: [Bool] -> Bool
or                      :: [Bool] -> Bool
#ifdef USE_REPORT_PRELUDE
and                     =  foldr (&&) True
or                      =  foldr (||) False
#else
and []          =  True
and (x:xs)      =  x && and xs
or []           =  False
or (x:xs)       =  x || or xs
#endif

and実際には 2 つの定義があることがわかります。1 つは Standard Prelude 定義であり、フラグを使用してコンパイルした場合にのみ有効になります。もう 1 つは、USE_REPORT_PRELUDEPrelude が通常コンパイルされるときに使用される定義で、通常はより最適化されています。

于 2012-09-22T14:57:19.990 に答える
2

Haskell のローカル ディストリビューション (おそらく Haskell Platform) でソース コードを見つけることは期待できません。代わりに、Hoogleにアクセスして関数を検索してください。必要な 1 つの方法は、その名前で検索し、andその Haddock に移動して、[ソース] をクリックすることです。

Hoogle では、タイプ シグネチャで検索することもできます。[Bool] -> Boolかなり頻繁にやっていることに気付くでしょう。

于 2012-09-22T14:57:56.917 に答える
1

http://www.haskell.org/onlinereport/standard-prelude.htmlを見てください。

andとして定義されfoldr (&&) Trueます。

于 2012-09-22T14:54:47.183 に答える