今日もやっていき
タプル
- 違う型の要素を格納して1つの値にする
- サイズが固定
*Main> (1,3) (1,3) *Main> (3, 'a', "hoooo!!!") (3,'a',"hoooo!!!")
- サイズ2のタプルを
ペア
という - サイズ3のタプルを
トリプル
という - 長さが同じでも違う型を含むタプルを違うものとして扱う
*Main> [(1,2),('a',4)] <interactive>:20:3: error: • Could not deduce (Num Char) arising from the literal ‘1’ from the context: Num t bound by the inferred type of it :: Num t => [(Char, t)] at <interactive>:20:1-15 • In the expression: 1 In the expression: (1, 2) In the expression: [(1, 2), ('a', 4)]
- タプルは固定長
- 要素の追加はできない
- 要素数が1のタプルは存在しない
ペアを使う
-- ペアの1つ目の要素を返す *Main> fst (1, 4) 1 -- ペアの2つ目の要素を返す *Main> snd (2, 8) 8
- fst, snd はペアにだけしか使えない
zip
- 2つのリストを走査してペアのリストを作る
*Main> zip [1,2,3,4,5] ['a','b','c','d','e'] [(1,'a'),(2,'b'),(3,'c'),(4,'d'),(5,'e')]
リストの長さが違う場合は長い方のあまりが無視される
*Main> zip [1,2,3,4,5] ['a','b','c'] [(1,'a'),(2,'b'),(3,'c')]
無限リストも使える
*Main> zip [1..] [100..110] [(1,100),(2,101),(3,102),(4,103),(5,104),(6,105),(7,106),(8,107),(9,108),(10,109),(11,110)]
直角三角形を見つける
*Main> let rightTriangles' = [ (a, b, c) | c <- [1..10], a <- [1..c], b <- [1..a], a^2 + b^2 == c^2, a + b + c == 24] *Main> rightTriangles' [(8,6,10)]
- 解の候補となる集合を用意
- 解にたどり着くために変換とフィルタリングをする
このパターンの解法が関数プログラミングでよく使われる

- 作者: MiranLipovaca
- 出版社/メーカー: オーム社
- 発売日: 2017/07/14
- メディア: Kindle版
- 購入: 4人 クリック: 9回
- この商品を含むブログを見る