kotarou1192

人間に擬態中

2019-01-01から1年間の記事一覧

Haskellで「ユークリッドの互除法」

GCD(最大公約数)の求め方 ユークリッドの互除法 - Wikipedia greatestCommonDivisor x y |x `mod` y == 0 = y |otherwise = greatestCommonDivisor y (x `mod` y)

where、let-in、case

where testFunc :: Int -> Int testFunc x = f x where f x = x^2 whereで引数xを取る関数fにx2を束縛しています 実行結果 >testFunc 4 16 whereにはスコープがあり、パターンマッチを次のようにした場合最後の本体のみから参照されるため意図したとおりに動…

パターンマッチ、ガードの話

パターンマッチとは tellMeNumber :: Int -> String tellMeNumber 1 = "ONE" tellMeNumber 2 = "TWO" tellMeNumber 3 = "THREE" tellMeNumber x = show x ++" is bigger than 3" 実行結果 >tellMeNumber 2 TWO >tellMeNumber 4 "4 is bigger than 3" 解説 1…

型クラスの説明

型クラスとはつまり関数の集まり(==や/=)を定めていて、その関数で扱う何かのふるまい(型)を定義するものです。 何か(1でも3でも何でも)を使うときに実装されて、というより実装されることで使えるようになって(インスタンス”実体”)、その実装されたと…

リスト内包表記で失敗した話

ステップのサイズは1つしか定義できない >[3,9,27..50] error 前回の記事のこれに関して、50以下の3nを羅列したい場合はどうすべきか? >[3^x|x<- [1..],3^x<=50] [3,9,27 Haskell の気持ち 31 = 3 50以下だ!出力! 32 = 9 50以下だ!出力! 33 = 27 50以下…

range(レンジ)の使い方

リストを一気に生成する >[1..30] [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30] ステップ(法則性のあるリスト)を生成する >[1,3..30] [1,3,5,7,9,11,13,15,17,19,21,23,25,27,29] ステップのサイズは1つしか定義…

リストの操作まとめ2(Haskell)

さらにリストを操作します リストの先頭を返します >head [3,4,5] 3 リストから先頭を除いたものを返します >tail [3,4,5] [4,5] 受け取ったリストから最後の要素のみ返します。 >last [3,4,5] 5 最後の要素以外を返します。 >init [3,4,5] [3,4] 空リストを…

リストの操作まとめ(haskell)

連結 >[2,3] ++ [4,5] [2,3,4,5] >1 : [2,3,4,5,6,7,8] [1,2,3,4,5,6,7,8] >[1,2] : [3,4,5,6,7,8,9] error >[1,2,3,4,5,6,7] ++ [8] [1,2,3,4,5,6,7,8] Haskellにおいて[1,2,3,4,5]などのリストは 1:2:3:4:5:[] の構文糖衣です。 これで上の挙動が理解でき…

Haskellの関数

Haskellの関数をまとめます 受け取った引数の次のものを返す succ 引数 実行例 >succ 1 2 なにか順番のついた引数を2つ受け取り、大きいほう(max)または小さいほう(min)を返す max 引数1 引数2 min 引数1 引数2 実行例 >max 5 6 6 >min 3.13 3.14 3.13 >min …