2007-08-01から1ヶ月間の記事一覧

練習問題

今日はuniq.hs。 import List main = do cs <- getContents putStr $ unlines $ map head $ group $ lines cs 関数がたくさん連続すると混乱しそうです。

練習問題

sort.hsの作成。私が書いたのはこれ。 import List main = do cs <- getContents putStr $ unlines $ sort $ lines cs 回答例はこうなっていました。 import List main = putStr . unlines . sort . lines =<< getContents これってコラムでちょっと出てきた…

関数内関数

fgrep.hsの作成。盛りだくさんでした。head関数はリストの先頭の要素を返す関数。そのままですね。tail関数はリストの先頭の要素を除いたリストを返す関数。リストの末尾の要素を返してきそうな関数ですが違いました。filterはリストから条件に合った要素の…

モジュール

import宣言でモジュールを使うことができます。サンプルで登場したのはSystemモジュールのgetArgs関数。サンプル中ではgetArgsで使っていましたが、System.getArgsというようにも書けるとのこと。余談ですが、サンプルプログラムを面白く感じてもらうために…

練習問題

標準入力の'a'と'A'を入れ替えるコマンドの作成。 main = do cs <- getContents putStr $ changea cs changea :: String -> String changea cs = map swapa cs swapa :: Char -> Char swapa 'a' = 'A' swapa 'A' = 'a' swapa c = c このように作りました。回…

再帰定義

Haskellにはforやwhileといったループのための構文が存在しないとのこと。このような場合は再帰定義を使うのだそうです。再帰なんて趣味のプログラムでたまに出てくるぐらいでしたが、Haskellの場合はしょっちゅう出てくるということなのでしょうね。リスト…

パターンマッチ

expandのバージョン2を作成。プログラムはこんなのですが説明なしでは意味不明。 tabStop = 8 main = do cs <- getContents putStr $ expand cs expand :: String -> String expand cs = concatMap expandTab cs expandTab :: Char -> String expandTab '\t'…

問題追加

その10(2x2)を追加しました。

再びリストと文字列の説明

expandのバージョン1を作成。concat関数が出てきました。expandのバージョン0ではタブ文字を別の文字に変更していましたが、バージョン1では文字列(空白8個)ということで、型が文字から文字列(文字のリスト)に変わりました。本ではリストついて再度説明され…

if登場

expand.hsのバージョン0を作成。ifが出てきました。どのプログラミング言語を使うにしても基本ですね。他とちょっと違うのは、Haskellではif文ではなくif式になっていること。式なので返値があります。elseが省略できないというのは、手続き型言語で慣れてい…

高階関数

関数を定義すると言っていたのは実は、ある関数が関数名の変数に束縛されているということだそうです。と書いても知らない人には伝わりませんね。本にはもっとわかりやすく書いてあります。JavaScriptの関数もこんな感じでしたね。メインの高階関数ですが「…

WindowsでPerl

PerlでWindowsアプリケーションを操作してみよう一つの記事にいくつかまとまっているとついでに新しいことまで覚えられて良いですね。Perl表技集でも同じようなサンプルを紹介しているのですがばらばらなので、せっかくなのでWindows関連ネタだけ抜き出して…

戻り値

コメントありがとうございます。 a -> b -> c の戻り値は b -> c なのさー。 とすると引数は一つずつということなのですね。動きとしてはこんな感じでしょうか。 f(a, b) = a + b という定義をした場合に f(5, 3) と呼び出した時は g(c) = 5 + c という関数g…

第3章に入りました。最初は型です。Haskellは静的な型チェックがあるけど型推論という機能で型を推測するので、型を明示的にかかなくても良いですよとのこと。とは言いつつも、明示的に宣言しておいた方が人間にとって分かりやすいので宣言するのは良いこと…

演習問題

2章のtail.hs, countbyte.hs, countword.hsを作成。countbyte.hsとcountword.hsは演習問題なので自分で作りました。作ったのはこれ。 main = do cs <- getContents print $ length cs main = do cs <- getContents print $ length $ words cs countbyteはバ…

関数

2章のhead.hsを作成。関数の定義が登場しました。定義自体は簡単で、 関数名 仮引数1 仮引数2 … 仮引数n = 本体と書くだけ。分からなかったのは関数の終わりがどこになるのか。}やendで終わるのであれば馴染みがあるのですが、そういう特定のキーワードはな…

問題追加

試験を追加しました。

バージョンアップしました

バージョン1.3.0.0です。 最小化時にシステムトレイに格納できるようにしました。 システムトレイへの格納はNotifyIconを使ったらものすごく簡単に実現できました。便利です。

リスト処理

2章のcountline.hsを作成。リスト構造が登場しました。リスト自体はPerlで慣れているので今のところそれほど難しくはありません。リストの中に一種類の値しか入れられないというのと、文字列が文字のリストになっていると言うところが、Perlのリストと違って…

PersonalWiki(仮)を使ってみました

ダウンロードはこちら。以前のバージョンはWikiが前面に出ていましたが、今回のバージョンではWiki書式が使えるスケジューラになっていました。第一印象としては軽いのが良かったです。私はスケジューラソフトは強いて言えばRemember The Milkをちょっと使っ…

呪文状態

1章のhello.hsと2章のcat.hsを作りました。今のところはプログラムが呪文状態で何がなにやらです。インデントが大事というのは分かりました。ちょっとしたプログラムを書くのでもできあがる実行ファイルのサイズは結構大きくなるのですね。hello.exeが579KB…

検索中の表示を文字から画像に変更しました

タグクラウド作成でWikipadiaデータの検索中はアニメーションの画像を表示するようにしました。今のところ検索はすぐ終わるので見る機会はあまりないと思います。画像はAjax loading gif generatorで作りました。便利です。

Haskellの勉強を始めました

関数型言語を知っておこうかと思い、Haskellの勉強を始めました。「ふつうのHaskellプログラミング」を読みながら進めて行く予定です。http://www.haskell.org/ghc/ からバイナリをダウンロードしてインストールするところまで行きました。ふつうのHaskellプ…

labelタグ

タグクラウド作成で「ハイライト」と「検索」を選択するラジオボタンにlabelタグを付けました。利用者側としてはこうしてあると文字の部分をクリックすればラジオボタンの選択になるので便利なのですが、使っていないところも結構あって使ってくれれば良いの…

問題追加

その9(2x2)を追加しました。このサイズでは特にテーマを持たせることはしていませんが、今回は魚関係でまとまりました。

スクリプト集追加

以下のスクリプトを追加しました。 HTTPステータスコード.pl 同一文字列数カウント.pl タブ区切り文字をPerlのハッシュ形式に変換.pl