Haskellでいってみよう

日曜プログラマにも満たないレベルでもHaskellで何かソフトウェアを作りたい!

同一画像検索(5): 同一判定方法の再考

前回簡易版を作ってみたが、縮小した画像が「同一」と見做されなかった。 今回はこれにどう対処するか検討してみる。 この問題は、各画像を4x4解像度に変換した結果(=fingerprint)を取った時に、 元画像と縮小画像とで微妙に異なるのが原因だった。 簡易版は…

同一画像検索(4): 簡易版を作ってみた

これまでの確認などを踏まえ、今回は簡易版を作ろう。仕様では4x4解像度の画像比較をして 一致したら次に16x16解像度でもう少し詳細に比較する、としているところ、まずは4x4解像度での 比較だけで作ってみようと思う。 最初に、「外枠」で示したfindSame関…

同一画像検索(3): 再帰のKAIZEN

前回の記事で、同一キーのファイルを集める処理に再帰を使った関数tomapを示した。 やりたいのはListを与えて最終的にMap(連想配列)が欲しいだけなのだが、 引数にもMapが入っていて気持ち悪い感じだった。 そのあと、いろいろ記事を見たり本を読んだりして…

同一画像検索(2):Finder moduleのための確認

前回はダミーのFinderモジュールで、とりあえず外側を作ったので、 今回からFinderの作成をすすめたい。ただ、その前に幾つか基本的な ところを確認しておきたい。 同一の画像を見つけるやり方は前回も書いた通り解像度4x4に変換して その情報が同じものをグ…

同一画像検索(1):仕様と外枠作り

前回からかなり時間が空いてしまったが…気を取り直して進めよう。 作りたいのは複数の画像ファイルの中から同じ画像を抽出するプログラムだった。 基本的な仕様は次の通りとする。 引数で調査したいディレクトリを指定する ディレクトリ内にあるJPEGファイル…

開発環境の整備とプロジェクトディレクトリ

ちゃんとしたプロダクトを作るにあたり、まずは開発環境を整えないといけない。 ソース管理は当然なので、今ならgithubが妥当だろう。早速ユーザ登録して、 新規リポジトリを開始する。この辺の詳しいところは、以下の書籍を参考にした。 GitHub実践入門 ~Pu…

簡易cat (2)

ファイル内容を表示するだけでは寂しいので、コマンドラインに オプションを追加してみる。ややこしいのは大変なので、先頭に 行番号を表示する -n モドキだけ。 -n オプションがある場合は各行の表示をする時に番号を付加する。 行番号はいわゆる「無限リス…

簡易cat - コマンドライン引数

はじめに、このブログはHaskellの入門記事でも何でもないので、その辺りはご期待には添えないのであらかじめお断りしておくことにする。単に、私がHaskellで何かしらソフトウェアを作るということのモチベーションを維持するためであり、またその過程を記録…

まずは "Hello, World!" から

実用的なプログラムを作ることが目的なので、実行ファイルを 作成できなくては始まらない。Haskellの本だと対話環境を使った リスト操作や再起などの説明が多いが、そうではなくてまずは コンパイルしてみる。お決まりの"Hello, World!"でも書いてみる。 (Gr…

Haskellコンパイラを入れる

どうやらHaskellのコンパイラとしてはGHCがメジャーということらしい。もろもろライブラリも使いたいのでHaskell Platformを入れるのがよいそうで。自宅はMacで、パッケージ管理はHomebrewを使っている。 $ brew install haskell-platform Warning: haskell-…

何をしようか?

このところ流行っていそうな関数プログラミングとやらに興味が湧いてきて雑誌記事やwebを読みまくってる。どうも個人的にはHaskellの言語特性もさることながら簡潔な文法にえらく関心してしまい、何とかHaskellでプログラムを書けるようになれないか、とむず…