2011-11-01から1ヶ月間の記事一覧

HUnit によるテストをしてみました。

本物のプログラマはHaskellを使う/ 第16回 Haskellでのテストの自動化を考えるを参考にHUnit によるテストをしてみました。 HUnitのインストール $ cabal install HUnit 与えられた身長(m),体重(kg) からBMI 指数を計算し、判定文字列を返します。シンガポー…

unfold 関数

「プログラミング Haskell 第7章 高階関数」の練習問題に unfold 関数が登場しています。 unfoldr は Data.List にも登録されていますので、どのような関数なのかやってみました。 foldはリストから値を求めますが、問題で作られている unfold 関数は初期値…

たらい回し関数によるGCC、OCaml、Haskellの速度比較

「お気楽 OCaml プログラミング入門」に色んな言語のたらいまわし関数の結果が掲載されていて、OCamlがCよりも速い驚異的な数値を叩き出していました。 Haskell がありませんでしたので比較してみました。 C #include <stdio.h> int tak(int x, int y, int z){ if (x </stdio.h>…

Parsec を使った計算機

Parsec を使った計算機。 import Text.ParserCombinators.Parsec import Control.Applicative hiding ((<|>)) expr :: Parser Int expr = tok(term) >>= (\t -> ((symbol "+") >> expr >>= (\e -> return (t + e ))) <|> ((symbol "-") >> expr >>= (\m -> r…

「Write Yourself a Scheme in 48 Hours」 を写経してみる(16) : 基本 IO の作成(2)

Write Yourself a Scheme in 48 Hours/Creating IO Primitives http://jonathan.tang.name/files/scheme_in_48/code/listing10.hs ioPrimitives が追加になって、"apply"など組み込み関数が使えるようになったかと思って実行してみるとエラーになります。 io…

「Write Yourself a Scheme in 48 Hours」 を写経してみる(15) : 基本 IO の作成。

Write Yourself a Scheme in 48 Hours/Creating IO Primitives http://jonathan.tang.name/files/scheme_in_48/code/listing10.hs Haskellはこれが最後のファイルです。 -- forall でエラーにならないように先頭に記入しておきます。 {-# LANGUAGE Existenti…

「Write Yourself a Scheme in 48 Hours」 を写経してみる(14) : Scheme関数の定義(3)

48時間でSchemeを書こう/Scheme関数の定義 http://jonathan.tang.name/files/scheme_in_48/code/listing9.hs apply の部分をもう少し追います。 apply は引数 args に引数 Func を適用して、その結果を返すという関数で、そのパターンは二つあります。 (1)最…

数字混じり文字列ソート

練習に「数字混じり文字列ソート」をしてみました。 例1: 辞書順ソート: 1.txt, 10.txt, 100.txt, 2.txt, 20.txt 数字混じり文字列ソート: 1.txt, 2.txt, 10.txt, 20.txt, 100.txt 例2: 辞書順ソート: x12, x13, x1A, x1B, xAB 数字混じり文字列ソート: x1A,…

「Write Yourself a Scheme in 48 Hours」 を写経してみる(14) : Scheme関数の定義(2)

48時間でSchemeを書こう/Scheme関数の定義 http://jonathan.tang.name/files/scheme_in_48/code/listing9.hs trace を入れて define、その定義された関数の適用される様子を追ってみます。 表示するための定義 instance Show LispVal where show = showVal2 …