閉じる

本物のプログラマはHaskellを使う

日経ソフトウエア
日経ソフトウエア

目次

  • 第19回 配列でデータ・アクセスの効率を上げる

     Haskellでは,リストを基本的なデータ構造として様々な用途に使います。一方,Cなどの命令型の言語では,配列(Array)を基本的なデータ構造として用います。この違いはどこから生じているのでしょうか? Haskellでリストを使う場合と配列を使う場合にはどのような違いがあるのでしょうか? 今回は…

  • 第18回 QuickCheckを使ってできることとできないこと

     Haskellでは多くの場合,データ駆動型のテスト・ツールであるQuickCheckの方が,xUnitの一つであるHUnitより役立ちます。ただ,QuickCheckは万能ではありません。場合によってはHUnitの方が有効なこともあります。今回は「QuickCheckでこうしたことはできるのか?」…

  • 第17回 QuickCheckでデータ駆動型テストを行う

     テストが適切かどうか不安な場合,一番単純な対策はテスト項目数を増やすことです。しかし,個々の値に対してテストを記述していくのは手間のかかる作業です。そこで,テストを行うべき値の集合に対してテストを行うツール,「データ駆動型のテスト・ツール(data-driven testing tool)」が有効…

  • 第16回 Haskellでのテストの自動化を考える

     皆さんはプログラムが正しく動作することをどうやって調べていますか? いちいち実行して確認している人もいるかもしれませんが,多くの人はツールや自作のプログラムを使って何らかの形でテストを自動化しているでしょう。ここ10年くらいで「テストの自動化」はプログラマにとってなじみの深い概念になりました。今回…

  • 第15回 Haskellでのデバッグのコツをつかむ

     プログラムが思った通りに動かないとき,あるいは他の人が書いたプログラムを理解したいときには,プログラムの挙動を調べてみるでしょう。そうしたときに使う手法が,プログラム動作中の変数の値といった情報を適宜出力する,いわゆるトレース(trace)です。今回は,Haskellでトレースを行う方法を紹介しま…

  • 第14回 Haskellでメッセージ通信を使う利点

     これまで,4回にわたって並行/並列プログラミングについて説明しました。その最後を締めくくる話題として,メッセージ通信を取り上げたいと思います。メッセージ通信は並行計算・並列計算・分散計算のうち,主に分散計算を行うことに焦点を当てた技術です。ただ,分散計算以外にも有用な局面はあります。

  • 第13回 スレッド安全なI/Oの排他制御を実現する

     ネットワーク・プログラミングやWebプログラミングなど,並行プログラミング機能を使うことが前提である状況では,理論的な説明よりも実際の使い方のほうが重要です。特にSTMは,トランザクション・メモリーという特殊性から,とても取っつきにくいように見えます。そこで今回は,スレッドやSTMを利用した実際の…

  • 第12回 Haskellで学ぶ並列プログラミング(その3)並行プログラミングと並列処理

     GHCの並列化機能は,「ある一つの計算の処理速度を向上させる」という目的を直接的に反映したものです。このため,処理速度の向上以外の部分には,十分に手が届かないこともあります。GHCが備える「並行Haskell(Concurrent Haskell)」という並行/並列プログラミングのための機能を使え…

  • 第11回 Haskellで学ぶ並列プログラミング(その2) 並列化手法

     前回は,GHCで並列プログラミングを行うための機能について説明しました。今回はそれらを使った並列プログラミングの具体的な方法について,もう少し詳しく説明していきたいと思います。

  • 第10回 Haskellで学ぶ並列プログラミング(その1)

     最近,並列計算や分散計算の話題をよく見かけるようになってきました。興味を持っている人も多いと思います。そこで今回から数回にわたって,GHC 6.6.xのSMP(対称型マルチプロセサ)サポートによって加わった並列化機能とそれらを使った並列プログラミングについて見ていきたいと思います。

  • 第9回 Haskellはなぜ遅いと思われているのか

     前回は遅延評価の仕組みについて説明しました。今回は前回の知識をもとに,遅延評価の効率について検討していきたいと思います。遅延評価の利点は,これまで何度も説明してきたように,無駄な計算を省けるところにあります。であれば,実行速度は速くなるはずです。にもかかわらず,なぜ「Haskellは遅い」と思われ…

  • 第8回 遅延評価の仕組み

     これまで何度か遅延評価について語ってきました。皆さんの頭の中には「遅延評価とはなんとなくこういうものだ」という漠然としたイメージができていると思います。ただ,プログラム全体の最適化のために関数やデータ構造の効率化を図るなら,遅延評価を正確に理解しておかなければなりません。そこで今回は,Haskel…

  • 第7回 入出力と遅延評価の間を取り持つIOモナド

     前回までいくつかモナドの例を見ていきました。それらの例を通して培ってきた知識を基にして,いよいよ今回はIOモナドについて説明したいと思います。Haskellの世界だけでI/Oの仕組みが完結するように定義されているGHCの実装を基に,IOモナドについて見ていきます。

  • 第6回 局所的な「状態」を利用するためのStateモナド

     プログラムを書いている中で,多くの式で同じ値を使いまわしていたり,値の変化に一定のパターンが生じていることに気づくかもしれません。こういう時,式に局所的(local,ローカル)な「状態(State)」があれば,プログラムをすっきり書くことができると思うのではないでしょうか? こうした場合,Hask…

  • 第5回 ListではなくMaybeを使う意義

     Maybeとは一体何でしょうか? なぜほかの型ではなくMaybeを使用するのでしょうか? 与えられた情報をただ漫然と常識として受け止めてしまうと,答えとなるような知識を得ることはできません。答えを得るためには,問いが必要なのです。今回はMaybe型の説明を通じて,そうした問いへの入り口を示したいと…

  • 第4回 「取り出し可能な値」のみを持つListモナド

     今回は具体的なモナドの例について見ていきたいと思います。前回,コンテナが持つ値には「取り出し可能な値」と「取り出し不可能な値」があると説明しました。今回は,「取り出し可能な値」のみを持つコンテナであるListを対象とするモナドについて紹介します。

  • 第3回 mapからモナドを理解する

     今回は「モナド(monad)」について説明します。モナドはHaskellの重要な特徴の一つなので,名前くらいは聞いたことがある人が多いでしょう。ただ,「モナドは難しい」という声もよく聞きます。モナドとは一体なんでしょうか。

  • 第2回 多相性(ポリモーフィズム)への理解を深める

     今回説明するテーマは「多相性」です。英語ではpolymorphism(ポリモーフィズム)になります。多相性は「ある関数や型を,複数の型に対して使用できる」という性質を示す言葉です。こうした性質を持つ関数であれば,数値計算や文字列の連結,I/O(入出力)処理など一見全く違うように見えるような処理を,…

  • 第1回 関数型プログラミングの世界へようこそ

     Haskellは,一部の先進的なソフトウエア開発者の間で,一種のブームと言えるほど熱狂的に受け入れられているプログラミング言語です。なぜならば,Haskellは様々な優れた特徴を持っているからです。

日経 xTECH SPECIAL

What's New!

経営

クラウド

アプリケーション/DB/ミドルウエア

運用管理

設計/開発

クライアント/OA機器

ネットワーク/通信サービス

セキュリティ

もっと見る