Chapter4 Sets, Types and Lists

  • importしてみて、使ってみる
    • Data.Listなるものをimportしてみる
    • その中のnubという関数を使う(重複を除いて出してくれる)
    • それをIO()標準出力させてみる
    • print関数を使えば、STALモジュール内の関数の結果を表示できる(Show属性を持つタイプなら)
module STAL 

where 

import Data.List

someFuncSTAL :: IO ()
--someFuncSTAL = putStrLn "STAL"
someFuncSTAL = putStrLn (nub "abcbca")
--someFuncSTAL = print (map run [1..10])
--someFuncSTAL = print (powerList "abc")
    • Main.hsにSTAL.hsをimportさせて、その中の関数 someFuncSTAL を実行させる
module Main where

import Lib
import GS
import TAMO
import STAL

main :: IO ()
main = do
     someFuncSTAL
    • .cabalでもSTALを読みこませるように書き換えて
library
  hs-source-dirs:      src
  exposed-modules:     Lib
                     , GS
                     , TAMO
                     , STAL
  build-depends:       base >= 4.7 && < 5
  default-language:    Haskell2010
    • こうしてから
$ stack install
$ mathBookStack-exe
abc
  • このData.Listを、誰が、いつ、どこから取ってきて、使わせてくれているのかはまだわかっていないのだが…。デフォルトで入っているのでimportに成功すればよい、ということか???
module STAL 

where 

import Data.List

someFuncSTAL :: IO ()
--someFuncSTAL = putStrLn "STAL"
--someFuncSTAL = putStrLn (nub "abcbca")
--someFuncSTAL = print (map run [1..10])
someFuncSTAL = print (powerList "abc")

naturals = [0..]

evens1 = [ n | n <- naturals , even n ]

odds1 =  [ n | n <- naturals , odd n ]

evens2 = [ 2*n | n <- naturals ]

small_squares1 = [ n^2 | n <- [0..999] ]

small_squares2 = [ n^2 | n <- naturals , n < 1000 ]

run :: Integer -> [Integer]
run n | n < 1 = error "argument not positive"
      | n == 1 = [1]
      | even n = n: run (div n 2)
      | odd n  = n: run (3*n+1)

ones = 1 : ones

{-
パワーセットを作る
要素なしのときは、空集合を唯一の要素とする集合 [[]]を返す
要素を一つ増やすごとに、増やす前までの要素からできていたパワーセットの
それぞれに新たな要素を付け加えたリストを作成し
パワーセット集合の要素として付け加える
-}
powerList  :: [a] -> [[a]]
powerList  [] = [[]]
powerList  (x:xs) = (powerList xs) ++ (map (x:) (powerList xs))