Mae向きなブログ

Mae向きな情報発信を続けていきたいと思います。

Haskell

最長重複文字列問題

『珠玉のプログラミング―本質を見抜いたアルゴリズムとデータ構造』の15章2節で紹介されている「最長重複文字列問題」をRubyを使って解いてみました。 「最長重複文字列問題」とは、文字列の中からもっとも長い重複する文字列を見つけるという問題で、 "miss…

28章分の10章

『Real World Haskell―実戦で学ぶ関数型言語プログラミング』の10章まで読みました。 9章 入出力事例研究:ファイルシステム検索ライブラリ 10章 コード事例研究:バイナリフォーマットの構文解析 どんどん難しくなってきました。分からないところが分からな…

28章分の8章

『Real World Haskell―実戦で学ぶ関数型言語プログラミング』の8章まで読みました。 7章 入出力 8章 効率的なファイル処理、正規表現、ファイル名マッチング 8章にでてくるGlob.hsは難しいと感じましたが,ファイル処理はイメージがつかみやすいので,やろう…

28章分の6章

『Real World Haskell―実戦で学ぶ関数型言語プログラミング』の6章まで読みました。 6章 型クラスを使う クラスとかインスタンスとか,JavaやRubyなどのオブジェクト指向言語で耳慣れた言葉が出てくるのですが,ちょっとニュアンスが違うので,戸惑いながら…

28章分の5章

『Real World Haskell―実戦で学ぶ関数型言語プログラミング』の5章まで読みました。 4章 関数プログラミング 盛りだくさんの内容でした。また難しい語句が結構でてきます。何日か後に説明出来るかどうかチェックするためにメモしておきます。 スペースリーク…

28章分の3章

『プログラミングHaskell』を読み終えてから,次はどこへ向おうかと考えたところ,『Real World Haskell―実戦で学ぶ関数型言語プログラミング』を向いていました。まだHaskellの魅力を語れるほどの力はありませんが,何かHaskellの不思議な魅力にすっかり惹…

13章分の13章

『プログラミングHaskell』の13章を読みました。 第13章 プログラムの論証 全体を通して,面白い内容ですが,特に「13.5 リストに対する数学的帰納法」以降の展開が面白いですね。 こんな感じです。 1. 多くの再帰関数は,連結演算子を用いて定義すると自然…

13章分の12章

『プログラミングHaskell』の12章を読みました。 第12章 遅延評価 どの節も非常に興味深い内容です。「12.1 導入」から少しずつ,着実に,面白く「12.6 部品プログラミング」へ向けて流れていく感じでした。 今まで,遅延評価とは,「評価を先延ばしにする」…

13章分の11章

『プログラミングHaskell』の11章を読みました。 第11章 切符番号遊び 切符番号遊びとは,切符の端に書いてある4つの数字を使って,10になるように数式を組み立てる遊びだそうです。 本章では,ゲームのルールを少し変更し,利用する数は任意の大きさで,全…

13章分の10章

『プログラミングHaskell』の10章を読みました。 第10章 型とクラスの定義 どの章にも長い例題(実際はあんまり長くありません)がありますが,本章では,「恒真式検査」と「仮想マシン」を作成します。 恒真式とは,常に真となる命題のことで, は,常に真と…

13章分の9章

『プログラミングHaskell』の9章を読みました。 第9章 対話プログラム 本章の最後に,「電卓」と「ライフゲーム」を作成します。簡単な関数を少しずつ作って,それを組み合わせていくと出来上がるのですが,それが心地よいです。 疑問点など 本章の練習問題…

13章分の8章(途中)

『プログラミングHaskell』の8章を読んでます。 第8章 関数型パーサー 本書を読んでいて,>に到達しました。「8.4 連結」です。 (>>=) :: Parser a -> (a -> Parser b) -> (Parser b) p >>= f = \inp -> case parse p inp of [] -> [] [(v, out)] -> parse (…

lhs2hs

ダウンロードしてきた2つのファイルは「リテレイト形式」で書かれていました。通常形式のほうがやりやすいので,Rubyを使って変換します。 lhs2hs.rb #!/usr/bin/env ruby comment_region = false while line = gets if /\A>\s(.*)/ =~ line if comment_regi…

実行の方法??

『プログラミングHaskell』の「第8章 関数型パーサー」を読んでいるのですが,実行方法について疑問があります。 本章のプログラムは,本質だけが書かれているので,ただ入力しただけでは動かないそうです。そこで,本書のサポートページ*1から, Parsing.lh…

13章分の7章

今日は,『プログラミングHaskell』の7章を読みました。 第7章 高階関数 第5章では,締めくくりとして,「シーザー暗号」が,本章では,「文字列の変換器」が取り上げられていました。どちらもとても興味深い内容です。しかも,章末の練習問題で,仕様を変更…

新しい言語を学ぶ意義

最近,Haskellについて学習を進めています。良い参考書(『プログラミングHaskell』)に出会ったので,楽しく勉強していますが,知人より,「高校でHaskellを教えることもないのに,なんでHaskellの勉強をする必要があるのか」という質問をされました。もっと…

13章分の6章

今日は,『プログラミングHaskell』の6章を読みました。 第6章 再帰関数 まず,再帰の定番である階乗の例がでてきます。 factorial :: Int -> Int factorial 0 = 1 factorial (n + 1) = (n + 1) * factorial n 3行目の式が, factorial n = n * factorial (n…

13章分の5章

今日は,『プログラミングHaskell』の5章まで読みました。 第4章 関数定義 自分では,だいたい理解できたと思いますが,「4.5 λ式」の中の const の理解が不十分だと思います。 第5章 リスト内包表記 特に,第5章は読んでいてとても楽しい章でした。扱ってい…

13章分の3章

『プログラミングHaskell』を購入しました。以前,Haskellを勉強しようと思った時期があり,勉強をはじめてみたものの途中で挫折した経験があるので,購入しようかどうか迷ったのですが,もう一度チャレンジしてみようと思いました。 今回も途中で挫折する可…

ふつうのHaskellプログラミング

今,「Learn You a Haskell for Great Good!」を少しずつ読んでいますが,初めて勉強する言語を英語の文章で理解するのは,とても難しいと感じています…。 ということで,『ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門』を購入…

Making Our Own Types and Typeclasses

ここ最近は,20世紀少年に没頭していました…。 さて,今日は「Learn You a Haskell for Great Good!」の 8. Making Our Own Types and Typeclasses を斜め読みしてます。まだ読みかけです。英語力が乏しいので,できるだけ実行させて試してみることを心がけ…

Modules

今日は,「Learn You a Haskell for Great Good!」の 7. Modules を斜め読みしてます。まだ読みかけです。Data.Mapのところが面白くもあり,難しくもあります。 例えば, phoneBook = [("betty", "555-2938") ,("bonnie", "452-2928") ,("patsy", "493-2928"…

Higher order functions

今日は,「Learn You a Haskell for Great Good!」の 6. Higher order functions を斜め読みしてみました。本章はボリュームがあります。一つ一つ実行しながら理解することを心がけました。 addThree :: (Num a) => a -> a -> a -> a addThree x y z = x + y…

Recursion

今日は,「Learn You a Haskell for Great Good!」の 5. Recursion を斜め読みしてみました。Haskellを勉強しようと思ったとき,Googleで調べてみると,Quicksortの例があちこちで見られましたが,そのQuicksortが出てきました(^^)。 quicksort :: (Ord a) =…

読書

今日は,「Learn You a Haskell for Great Good!」の, 3. Types and Typeclasses 4. Syntax in Functions を読みました。

フィボナッチ数列

たらい回し関数 http://d.hatena.ne.jp/rahaema/20090130 たらい回し関数(続き…) http://d.hatena.ne.jp/rahaema/20090203 たらい回し関数(続・続き…) http://d.hatena.ne.jp/rahaema/20090205 ここ何日(上記)か,たらい回し関数(竹内関数)を通して,遅延評…

rightTriangles

無謀にも「Learn You a Haskell for Great Good!」を読み始めました。といっても,英文は斜め読みしながら実行していこうと思います。多分,速い段階で壁にぶつかると思いますが,コツコツやってみます。 今日は, 1. Introduction 2. Starting Out を斜め読…

たらい回し関数

「たらいを回すならHaskell」を読みました。たらい回し関数(竹内関数)を,Perl, Ruby, Python, C言語, Haskellで作って,実行速度を比較しています。言語によって,これほど性能差があるというのは驚きでした。Haskellがこんなに早いのは,遅延評価という仕…

hrefのインストール

Haskellを勉強するために,href*1をMacにインストールしました。 その際,困ったことをメモしておきます。MacOS Xでは,sudoコマンドを使うのですが,sudoコマンドで環境変数を設定する方法が分かりませんでした。以下のようにすることでインストールできま…

Haskellをやってみようと思う

最近,Haskellという言語の名前を良く聞きます。自分の周りでもやっている人,やろうとしている人が多くなってきたような気がするので,自分もやってみようと思います。とりあえず,環境だけ構築しました。「関数型プログラミングの世界へようこそ」では,導…