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個)ということで、型が文字から文字列(文字のリスト)に変わりました。本ではリストついて再度説明され…
expand.hsのバージョン0を作成。ifが出てきました。どのプログラミング言語を使うにしても基本ですね。他とちょっと違うのは、Haskellではif文ではなくif式になっていること。式なので返値があります。elseが省略できないというのは、手続き型言語で慣れてい…
関数を定義すると言っていたのは実は、ある関数が関数名の変数に束縛されているということだそうです。と書いても知らない人には伝わりませんね。本にはもっとわかりやすく書いてあります。JavaScriptの関数もこんな感じでしたね。メインの高階関数ですが「…
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のリストと違って…
ダウンロードはこちら。以前のバージョンはWikiが前面に出ていましたが、今回のバージョンではWiki書式が使えるスケジューラになっていました。第一印象としては軽いのが良かったです。私はスケジューラソフトは強いて言えばRemember The Milkをちょっと使っ…
1章のhello.hsと2章のcat.hsを作りました。今のところはプログラムが呪文状態で何がなにやらです。インデントが大事というのは分かりました。ちょっとしたプログラムを書くのでもできあがる実行ファイルのサイズは結構大きくなるのですね。hello.exeが579KB…
タグクラウド作成でWikipadiaデータの検索中はアニメーションの画像を表示するようにしました。今のところ検索はすぐ終わるので見る機会はあまりないと思います。画像はAjax loading gif generatorで作りました。便利です。
関数型言語を知っておこうかと思い、Haskellの勉強を始めました。「ふつうのHaskellプログラミング」を読みながら進めて行く予定です。http://www.haskell.org/ghc/ からバイナリをダウンロードしてインストールするところまで行きました。ふつうのHaskellプ…
タグクラウド作成で「ハイライト」と「検索」を選択するラジオボタンにlabelタグを付けました。利用者側としてはこうしてあると文字の部分をクリックすればラジオボタンの選択になるので便利なのですが、使っていないところも結構あって使ってくれれば良いの…
その9(2x2)を追加しました。このサイズでは特にテーマを持たせることはしていませんが、今回は魚関係でまとまりました。
以下のスクリプトを追加しました。 HTTPステータスコード.pl 同一文字列数カウント.pl タブ区切り文字をPerlのハッシュ形式に変換.pl