ごく基本。関数ファイルの読み込み、リスト・タプル・集合表記(2)

  • 関数を書いたファイルを保存して、ロードして使う
doubleme x = x + x
  • というテキストファイルを"hs0129.hs"という名前で保存して
:l hs0129.hs
doulbeme 3
  • とやれば使える
ghci> :l hs0129.hs
[1 of 1] Compiling Main             ( hs0129.hs, interpreted )
Ok, modules loaded: Main.
ghci> doubleme 3
6
  • 短いいろいろをいちいちファイル保存するのが面倒なので
let doubleme2 x = x+x
doubleme2 3
ghci> let doubleme2 x = x+x
ghci> doubleme2 3
6
  • のようにターミナルで直接、関数を書き込んでコンパイルしてもらうこともできる
  • オブジェクトを作るのも同じ
let testnums = [1,3,5]
testnums
ghci> let testnums = [1,3,5]
ghci> testnums
[1,3,5]
  • リストはよく使う。それがどういう作りになっているのかを知ることはハスケルの勉強の楽しい部分の一つだが、はじめは、こうなっている、と割り切って覚えるのもよい
ghci> 3:[2,3,4]
[3,2,3,4]
ghci> [4,5,2,3]!!3
3
ghci> [4,5,2,3]!!0
4
ghci> [4,5,2,3]!!1
5
ghci> [4,5,2,3]!!2
2
ghci> [4,5,2,3]!!3
3
ghci> [1..7]
[1,2,3,4,5,6,7]
ghci> [2,5..60]
[2,5,8,11,14,17,20,23,26,29,32,35,38,41,44,47,50,53,56,59]
  • 集合表記。組み合わせれば、条件を満足する格子点の列挙とかもできる。ここではタプル(a,b,c)も使っている
ghci> [x^2|x <- [1..5]]
[1,4,9,16,25]
ghci> [(a,b,c)|a <-[0..10],b<-[0..10],c<-[0..10],2*a+b-3*c==0]
[(0,0,0),(0,3,1),(0,6,2),(0,9,3),(1,1,1),(1,4,2),(1,7,3),(1,10,4),(2,2,2),(2,5,3),(2,8,4),(3,0,2),(3,3,3),(3,6,4),(3,9,5),(4,1,3),(4,4,4),(4,7,5),(4,10,6),(5,2,4),(5,5,5),(5,8,6),(6,0,4),(6,3,5),(6,6,6),(6,9,7),(7,1,5),(7,4,6),(7,7,7),(7,10,8),(8,2,6),(8,5,7),(8,8,8),(9,0,6),(9,3,7),(9,6,8),(9,9,9),(10,1,7),(10,4,8),(10,7,9),(10,10,10)]