Haskell

モナド入門

『Introduction to Functional Programming using Haskell』10章モナドからメモ。 本章は、モナディックプログラミングと呼ばれる関数型プログラミングの新たなスタイルについて紹介します。 モナディックプログラムは、関数型環境での相互作用(interaction)…

型の別名

Haskellでは、typeキーワードで型の別名を定義します。 type Point = (Integer, Integer) foo :: Point -> String foo p = show p foo (0, 1) → "(0, 1)"

以下について教えてあげよう

東方算程譚 - 以下について教えてあげよう♪ Haskellでやってみた。 import Char main = print $ problem "Abc012_59F_#012Gh" problem :: String -> String problem = proc . break (== '#') proc :: (String, String) -> String proc (s, ss) = (map (toLow…

show

showは、引数を文字列に変換する関数です。 show True → "True" show False → "False" show 3.14 → "3.14" 以下のようなユーザー定義の型の場合には data Day = Sun | Mon | Tue | Wed | Thu | Fri | Sat Day型をShowクラスのインスタンスにすることで show…

nullary tuple

『Introduction to Functional Programming using Haskell』 2.4 Tuplesからのメモ。 以下の場合、piは引数をとらずに戻り値のみを持っているのでこれは定数になります。 pi :: Double pi = 3.14 定数を関数レベルに引き上げるためには、ユニット式というも…

ガード式 vs 条件式

『Introduction to Functional Programming using Haskell』届きました。この本は、Mirandaで書かれていた『関数プログラミング』のHaskell版です。 1章 Fundamental concepts、1.5 Definitionsのあたりからメモ。 条件式の代わりにガード式を使用する利点は…

『Programming in Haskell』 7章 高階関数

『Programming in Haskell』のスライドを7章まで翻訳しました。 以下のエントリ経由でダウンロードしてください。 『Programming in Haskell』のスライドを翻訳(※随時更新) foldrはすばらしい!

『Programming in Haskell』 6章 再帰関数

『Programming in Haskell』のスライド、6章まで訳しました。 以下のエントリ経由でダウンロードしてください。 『Programming in Haskell』のスライドを翻訳(※随時更新)

『Programming in Haskell』のスライドを翻訳(※随時更新)

『Programming in Haskell』の著者Graham Huttonによる、 各章の要点をまとめたスライドが以下のURLで公開されています。http://www.cs.nott.ac.uk/~gmh/book.html とてもおもしろい内容だったので少しずつ翻訳してます。 翻訳したスライドは、以下の場所で…

リスト内包表記でmapとfilter

map(写像)は、再帰で書くとこう mapp _ [] = [] mapp f (x: xs) = f x : mapp f xs リスト内包表記を使った場合はこうなる map f xs = [f x | x <- xs] filter(濾過)は再帰で書くとこう filter _ [] = [] filter p (x:xs) = if (f x) then (x:(filter p xs))…

リスト内包表記

ふつけるだとリスト内包表記について1ページしか書かれていなかったのですが 『関数プログラミング』ではけっこうくわしく書かれていて、 サンプルもいっぱい載ってるのでわかりやすいです。 ということで、お試しをいくつか書きます。 単純な1〜3の要素を…

単射、逆関数、全射、全単射

いま『関数プログラミング』という本を読んでます。 関数プログラミング作者: R.バード,P.ワドラー,武市正人出版社/メーカー: 近代科学社発売日: 1991/04メディア: 単行本購入: 7人 クリック: 82回この商品を含むブログ (13件) を見る ちょっと難しくなって…

続々・縦書き

続・縦書きのさらに続き Arrowで書き直してみた import List import Control.Arrow main = getContents >>= arr (lines >>> reverse >>> normalize >>> transpose >>> unlines >>> putStrLn) -- 長さを同じにする normalize = (maximum . map length &&& map…

Arrow勉強中

ポイントフリースタイルで書いた場合 main = print $ wc "Hello World Akira" wc = length . words Arrowを使った場合 import Control.Arrow main = print $ wc "Hello World Akira" wc = arr (words >>> length) "Akira"が渡されたら左側(++ " : C++")、そ…

続・縦書き

縦書き?の続き 行が異なる長さでもいけるようにした import List main = putStrLn . unlines . transpose . normalize . reverse . lines =<< getContents -- 長さを同じにする normalize :: [String] -> [String] normalize s = fillSpace s (maxLength s)…

縦書き?

ネタ元:縦書きの続き - The beast of halfpace Haskellだとこんな感じでしょうか(2行) import List main = getContents >>= print . transpose . reverse . lines こういうテキストを用意して Hello World Akira実行するときに食わせるとこういうリストがで…

C++コンセプトとHaskell型クラスの比較

メモA comparison of C++ concepts and Haskell type classes

ふつけるでMaybeモナド中

config :: [(String, [(String, String)])]; config = [ ("database", [("path", "var/app/db"), ("encoding", "euc-jp")]), ("urlmapper", [("cgiurl", "/app"), ("rewrite", "True")]), ("template", [("path", "/var/app/template")]) ] main = print $ c…

パターンマッチで階乗

main = print $ fact 3 fact :: Int -> Int fact 0 = 1 fact x = x * fact (x - 1)

多相型と型クラス

Haskellの多相型と型クラスって C++0xのテンプレートとコンセプトの関係に似てるなー

はじめての遅延評価

-- 1から始まる無限リストから先頭5個を取り出す main = print $ take 5 (ints 1) -- nから始まる無限リストを作成 ints n = n : (ints (n + 1)) {- 結果 [1,2,3,4,5] -} 遅延評価いいなーC++ に lazy ください

コメント

すぐ忘れちゃうのでメモ・行コメントは -- ・ブロックコメントは {- 〜 -}

簡約(reduction)と参照透明性(referential transparency)

いま『ふつうのHaskellプログラミング』で Haskell を勉強しています ちょっと難しくなってきたのでメモ square n = n * n この square 関数に引数を渡して、関数を評価した場合 square (1 + 3) 以下のように置き換えられる → (1 + 3) * (1 + 3) → 4 * 4 → 1…