Haskell
再帰関数定義のための5段階の工程 1:型を定義する pow :: Int a => a -> a -> a 2:場合分けをする 数値なら(0, n), リストなら([], x:xs)などで場合分けする pow a n | (n == 0) = | (n > 0) = 3:簡単な方を定義する たいていの場合、基底部の方が簡単 pow …
リポジトリ Arrays.sortに習って、a[fromIndex, toIndex)がソートされるようにしてみる。 また、javaにはswap()がないので適当に実装しておく。 public static final void xxxSort(T a[], int fromIndex, int toIndex) { ... } public static final int[] sw…
zip 2つのリストを取り、対応する要素をタプルにしたリストを作る。 2つのリストの長さが違う場合は、短い方のリストと同じ長さのリストとして扱う。 pairs :: [a] -> [(a,a)] pairs xs = zip xs (tail xs) -- pairs [1, 2, 3, 4] -----> [(1,2),(2,3),(3,…
cons演算子「:」 既存のリストの先頭に新しい要素を追加したリストを作成する cons演算子は右結合 Prelude> :t (:) (:) :: a -> [a] -> [a] Prelude> 1 : [2, 3] [1,2,3] Prelude> 1 : (2 : (3 : [])) -- [1, 2, 3]はこれの略記 [1,2,3] Prelude> 1 : 2 : 3 …
基本型 Bool (真理値) False, True. Char (文字) シングルクォートで囲む。他の言語同様。 String (文字列) ダブルクォートで囲む。他の言語同様。 Int (固定制度整数) 固定長整数。プログラミングHaskellによると、Hugsではらしいが、 Integer (多倍長整数)…
標準ライブラリ(Prelude) 二項演算 除算はdiv関数を使う。通常関数は、ポーランド記号(前置記法, prefix notation)で書くが、バッククオートを入れると中置記法(infix notation)で書くことができる。 演算子の優先順位や結合の仕方は数学の慣習と同じ(累乗演…
プログラミングHaskellでは実際のHaskellで入力する記号ではなく数学記号で記述されている。 否定とノットイコールの入力方法が慣れ親しんでるプログラミング言語とは違う。 数学記号 意味 入力方法 変換する -> クラス制約 => 以上 >= 以下 等しくない /= …
動機 新言語Swiftとか色々な言語でで関数型プログラミングをサポートし始めたので、ちょっとかじっておきたかった。 学ぶなら純粋関数型言語ということで、言語はHaskellにしますた。 参考書はプログラミングHaskell。 訳者のサポートページhttp://www.mew.o…