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 True → "True" show False → "False" show 3.14 → "3.14" 以下のようなユーザー定義の型の場合には data Day = Sun | Mon | Tue | Wed | Thu | Fri | Sat Day型をShowクラスのインスタンスにすることで show…
『Introduction to Functional Programming using Haskell』 2.4 Tuplesからのメモ。 以下の場合、piは引数をとらずに戻り値のみを持っているのでこれは定数になります。 pi :: Double pi = 3.14 定数を関数レベルに引き上げるためには、ユニット式というも…
『Introduction to Functional Programming using Haskell』届きました。この本は、Mirandaで書かれていた『関数プログラミング』のHaskell版です。 1章 Fundamental concepts、1.5 Definitionsのあたりからメモ。 条件式の代わりにガード式を使用する利点は…
『Programming in Haskell』のスライドを7章まで翻訳しました。 以下のエントリ経由でダウンロードしてください。 『Programming in Haskell』のスライドを翻訳(※随時更新) foldrはすばらしい!
『Programming in Haskell』のスライド、6章まで訳しました。 以下のエントリ経由でダウンロードしてください。 『Programming in Haskell』のスライドを翻訳(※随時更新)
『Programming in Haskell』の著者Graham Huttonによる、 各章の要点をまとめたスライドが以下のURLで公開されています。http://www.cs.nott.ac.uk/~gmh/book.html とてもおもしろい内容だったので少しずつ翻訳してます。 翻訳したスライドは、以下の場所で…
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…
ポイントフリースタイルで書いた場合 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実行するときに食わせるとこういうリストがで…
メモA comparison of C++ concepts and Haskell type classes
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 ください
すぐ忘れちゃうのでメモ・行コメントは -- ・ブロックコメントは {- 〜 -}
いま『ふつうのHaskellプログラミング』で Haskell を勉強しています ちょっと難しくなってきたのでメモ square n = n * n この square 関数に引数を渡して、関数を評価した場合 square (1 + 3) 以下のように置き換えられる → (1 + 3) * (1 + 3) → 4 * 4 → 1…