Your SlideShare is downloading. ×
0
Haskell 6-module
Haskell 6-module
Haskell 6-module
Haskell 6-module
Haskell 6-module
Haskell 6-module
Haskell 6-module
Haskell 6-module
Haskell 6-module
Haskell 6-module
Haskell 6-module
Haskell 6-module
Haskell 6-module
Haskell 6-module
Haskell 6-module
Haskell 6-module
Haskell 6-module
Haskell 6-module
Haskell 6-module
Haskell 6-module
Haskell 6-module
Haskell 6-module
Haskell 6-module
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Haskell 6-module

541

Published on

読書会用のすごいH本の6章「モジュール」のレジュメ。

読書会用のすごいH本の6章「モジュール」のレジュメ。

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
541
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. すごいH本第6章モジュール
  • 2. Haskellのモジュール = いくつかの関数や型、型クラスを   定義したファイル。Haskellのプログラム = モジュールの集合。
  • 3. エクスポート = モジュールの中身を外の世界から   見えて、使えるようにすること。インポート = モジュールを利用するための   おまじない。
  • 4. モジュールに分割する利点1)汎用的なモノはいろんな所で使える2)疎結合することで再利用がしやすい3)管理がしやすい
  • 5. モジュールをインポートする = import ModuleName #関数定義よりも前に書く(通常はファイルの先頭)複数のモジュールをインポートする = import ModuleName1   import ModuleName2   …
  • 6. 例:Data.Listモジュールのインポートimport Data.ListnumUniques :: (Eq a) => [a] -> IntnumUniques = length . nub #(関数合成版)numUniques xs = length (nub xs) #(通常版)numUniques = \xs -> length (nub xs) #(λ版)
  • 7. モジュールをGHCiでインポートする ghci> :m + Data.List複数のモジュールをGHCiでインポートする ghci> :m + Data.List Data.map Data.Set
  • 8. 特定の関数をインポートする = import Data.List (nub, sort)特定の関数以外をインポートする #名前の競合を避けるためなど・・・ = import Data.List hiding (nub)
  • 9. 名前競合を避けるもう一つの方法 = 修飾付きインポート   (qualifiedインポート)
  • 10. 例:Data.Map.filterの利用 #Prelude.filterと名前競合 = import qualified Data.Map   Data.Map.filter ...もっと簡単に = import qualified Data.Map as M   M.filter ...
  • 11. 修飾付きインポートと関数合成の見分け方インポートされた関数 = qualifiedされたモジュール.関数名       #空白を開けない↑関数合成 = 上記以外
  • 12. モジュールを作ってみよう例:幾何学オブジェクトの体積と  面積を計算するモジュール1.ファイルを作成する  Geometry.hsを作成
  • 13. 例:幾何学オブジェクトの体積と  面積を計算するモジュール2.モジュールの先頭でモジュール名を指定する  #ファイル名に従ったモジュール名を指定  Geometry.hs -> module Geometry
  • 14. 例:幾何学オブジェクトの体積と  面積を計算するモジュール3.モジュールがエクスポートする関数を指定する   module Geometry (sphereVolume, ... )where
  • 15. 例:幾何学オブジェクトの体積と  面積を計算するモジュール4.関数を追加する  module Geometry (sphereVolume, ... )where  sphereVolume :: Float -> Float sphereVolume = (4.0/3.0) * pi * (radius ^ 3)
  • 16. 階層的モジュールモジュールは階層構造を持つこともできる ー> 例:幾何学モジュールの分割
  • 17. 分割されたモジュールを作ってみよう例:幾何学オブジェクトの体積と  面積を計算する分割されたモジュール1.フォルダを作成する  Geometryを作成
  • 18. 例:幾何学オブジェクトの体積と  面積を計算する分割されたモジュール2.ファイルを作成する  ・Sphere.hsを作成  ・Cuboid.hsを作成  ・Cube.hsを作成
  • 19. 例:幾何学オブジェクトの体積と  面積を計算する分割されたモジュール3.モジュールの先頭でモジュール名を指定する  #フォルダ名とファイル名に従った  #モジュール名を指定  Geometry/Sphere.hs -> module Geometry.Sphere
  • 20. 例:幾何学オブジェクトの体積と  面積を計算するモジュール3.モジュールがエクスポートする関数を指定する   module Geometry.Sphere (volume, area )where
  • 21. 例:幾何学オブジェクトの体積と  面積を計算するモジュール4.関数を追加する  module Geometry.Sphere (Volume, area )where  Volume :: Float -> Float Volume = (4.0/3.0) * pi * (radius ^ 3)
  • 22. モジュールは階層構造を持つこともできる ・モジュールに分けることで、  同じ名前の関数を定義することが可能  Geometry.Sphere.volume  Geometry.Cuboid.volume  Geometry.Cube.volume
  • 23. まとめHaskellのプログラムはモジュールの集合モジュールはいくつかの関数や型、型クラスを定義したファイルモジュールに分割する利点1)汎用的なモノはいろんな所で使える2)疎結合することで再利用がしやすい3)管理がしやすいモジュールはインポートして利用するモジュールは自作することができる

×