Haskell

プログラミングHaskellを読む(9)

いよいよモナドに近づいて来ました。前章と比較しながら読むと、この章は前章の抽象化であることが分かります。 第9章 対話プログラム 基本 バッチプログラムは副作用がない。対話プログラムは入力が非決定的なので副作用が発生します。 では、副作用を起こ…

プログラミングHaskellを読む(8)

久々の更新です。この章はかなりきついです。以下を理解するまでに3回ぐらい投げてます。 第8章 関数型パーサー 基本 実際に動かすことができた所のソースコードを載せます。 import Char type Parser a = String -> [(a, String)] -- 入力をそのまま出力に…

プログラミングHaskellを読む(7)

第7章 高階関数 基本 高階関数とは 引数として関数をとったり、関数を返したりする関数。ただし、Haskellではカリー化のため関数を返すのが常なので、明示的に高階関数と呼ぶ場合は、引数として関数を取る関数である事が多い。 twice :: (a -> a) -> a -> a …

プログラミングHaskellを読む(6)

ここのところ何故か非常に忙しいのですが、なけなしの時間を捻出して読みました。ふぅ。 第6章 再帰関数 この章は、真新しいことはあまりなく、そんなに難しくないです。次の章もかな? I/Oはまだが~ 基本 Haskellでは関数を関数自身を使って定義することが…

プログラミングHaskellを読む (5)

第5章 リスト内包記法 この章のシーザー暗号の部分は、なかなか面白いです。 基本 リスト内包記法は数学の集合の表現を模している。 参考:集合の基本概念:定義と記号[数学についてのwebノート] *Main> -- { x^2 | x ∈ {1, ..., 10} } *Main> [x^2 | x <- […

プログラミングHaskellを読む (4)

第4章 関数定義 関数定義で使えるワザ 既存の関数を利用する if文 一番単純なパターンマッチ thenとelseが必須 then, else節は型が同じ必要がある 必須なのでいわゆる「ぶらさがりelse問題」が発生しない -- 絶対値 abs1 n = if n >= 0 then n else -n -- 整…

プログラミングHaskellを読む (3)

第3章 型とクラス 基本 Bool, Char, String*1, Int, Integer, Float リスト [a] 要素の型は同じ、型に「長さ」は含まない、長さに制限はない タプル (a, b) 要素の型は自由、型で「要素数*2」が分る 最初の要素は「ユニット」という 要素数1のタプルは存在…

プログラミングHaskellを読む (2)

第2章 はじめの一歩 標準ライブラリ:Prelude GHCiは起動時に標準ライブラリはPrelude.hsを読み込む。 プロンプトにPreludeと出るのはそのため。 各種演算子も当然のことながら関数で、Prelude.hsで定義されている。 整数の割り算は"`div`"*1。浮動小数点の…

プログラミングHaskellを読む (1)

先日宣言したように、プログラミングHaskellを買ってきたので、ちまちまと読むことにします。 モチベーション維持のためにも、章ごとにメモや感想、練習問題の自分なりの解答を、このブログに書いていきたいと思います*1。 第1章 導入 まず、この章を読んで…

練習用コードを書くために

以下、Windows7 + Haskell Platform + Cygwinの環境下でのメモです。 練習のためのコードを書くために Haskell Platformでは ghc コンパイラ。ネイティブバイナリを生成。 ghci 対話型の簡易インタプリタ。 runghc スクリプトの実行。 がHaskellプログラムを…

Haskell入信

なんとなくHaskellを始めようという気になったので、ちょっと本気でやってみることにします。 関数型言語は、一応OCaml・Scalaには触ったことがあるのですが、Haskellは完全に初めてです。 果たしてどうなることやら。 まずはインストール WindowsとMac両方…