タグ

ブックマーク / madscientist.jp/~ikegami (21)

  • Inemuri nezumi diary(2009-05-29)

    _ ふつうでない Haskell の学び方:なぜ「遅延する」関数型言語は重要か John Hughes の書いた "Why Functional Programming Matters" という、とても魅力的な文章があります(邦訳は nobsun がしてくださいました 『なぜ関数プログラミングは重要か』)。 この文書のなかで、 John は「遅延評価」がプログラムのモジュール化に貢献することを述べています。また、アルゴリズムを遅延的に書くことで実行効率があがることもあるということを指摘しています。 ところで、一方でこういう有名なプログラミングに関するジョーク(にしては、とても気合が入っている)をご存知の方もいることでしょう : "The Evolution of a Haskell Programmer", Fritz Ruehr, Willamette University,2001-0

  • http://madscientist.jp/~ikegami/diary/20090128.html

  • Inemuri nezumi diary(2009-01-08) - _ unsafePerformIO の使用は限定されています。ご利用は計画的に。

    _ unsafePerformIO の使用は限定されています。ご利用は計画的に。 いたるところで、 unsafePerformIO を見かけるようになったのでひとこと言うといたるわ。「Unsafe やって書いてある」やろ。おっと、地が出てしもた。 unsafePeformIO はもともと Haskell の規格 Haskell98 にはありません。初めて現れたのは、 "The Haskell 98 Foreign Function Interface 1.0 An Addendum to the Haskell 98 Report" の 5節 Marshalling についての、5.1 節 Foreign モジュールが提供するインターフェースについてです。 unsafePerformIO :: IO a -> a Return the value resulting from execut

  • Inemuri nezumi diary(2008-05-15)

    _ vim でも flymake (on-the-fly syntax checking) 周りに vim を使う人が多い。私も vi を使うことがあるが、それは itojun 氏の nvi-m17n を昔使っていたからである。当時(という言葉を使いたくないが)、日語を読み書きすることのできる高機能エディタは nvi か nemacs しか無かったのである(あ、Unix の話ね。MS-DOSや国産OSのほうが当時は日語処理がまともだった)。どちらも痛し痒しで、状況に応じて両方を使い分けるしかなかったのだ。WWW なんてなかった頃の話である。 で、今はといえば、もう断然 Emacs である。 anything.el なる便利な仕掛けができてしまったので、私はついこの間、とうとう Emacs21 から Emacs22 に乗り換えた。.emacs を移し変えるにあたって、Emacs Lisp

    takkan_m
    takkan_m 2008/05/15
  • http://madscientist.jp/~ikegami/diary/20080514.html

  • Inemuri nezumi diary(2008-05-07)

    _ Haskell (GHC 6.8) における拡張可能なレコードを実現する手法 Simple Extensible Records -- Quick Generic Tricks, Pt.1 という手法が開発されたというニュースを目にしました(from programming.reddit.com)。 GHC 6.8.2のData.Genericsと"Scrap your boilerplate" -- Generic programming in Haskellを理解されている方にはこれ以上の解説は不要だと思います。Simple Extensible Recordsは便利な手法なので、使いどころがあれば適用してはいかがでしょうか。 ここに私なりに理解したことをメモしておきます。間違いなどがあったらご指摘ください。 Haskell の基と、その問題 Haskell が持っている強力な機

  • http://madscientist.jp/~ikegami/diary/20080501.html

  • すばらしいソフトウエアを作るためには Inemuri nezumi diary(2008-04-03)

    _ エイプリルフールに乗り遅れた ふぬんが。去年の4/1にやった四月馬鹿と、その後の一連のエントリの評判がよかったので2月から準備して、3月は日記も(ほとんど)書かずに脇目もふらずに準備していたのだが。風呂敷を広げすぎたようだ。 でもおかげで、自分のやりたいことが明確になったことは感謝している。今後もほそぼそと続けていれば、来年には大バカぶりをお見せすることができるだろう。それでいいのか、という思いもあるが。 _ 坤(坤為地) 坤、元亨。利牝馬之貞。君子有攸往、先迷、後得生。利西南得朋、東北喪朋。安貞吉。 彖曰、至哉坤元、萬物資生。乃順承生。坤厚載物、徳合无彊。含弘光大、品物咸亨。牝馬地類、行地无彊。柔順利貞、君子攸行。先迷失道、後順得常。西南得朋、乃与類行。東北喪朋、乃終有慶。安貞之吉、應地无彊。 象曰、地勢坤。君子以厚徳載物。 『易経上経』、「坤」より一部抜粋。 八卦の中で、いまのお気

  • Purely testing Inemuri nezumi diary(2008-03-14) - Purely testing

    _ Purely testing Type-driven testing in Haskell (Simon Peyton Jones)より。 Simon の主張はいつもすばらしいのだけど、この発表に関しては Summary に首をかしげる人もいるかもしれない(わたしもその一人): Over the next 10 years, the software battleground will be the control of effects To succeed, we must shift programming perspective from imperative-by-default to functional-by-default A concrete example: testing Functional programs are far easier to test A fu

  • Inemuri nezumi diary(2008-01-03) : Ruby on Rails の注文の多い料理店に入ってしまった話

    _ Ming/Ruby 0.1.9 has been shipped 去年のクリスマスに Pawel Karwowski からありがたいメールが来て、Pawel がメンテナに加わってくれました。0.1.8 が 155 KB, 0.1.9 が 1.72 MB です。どんだけがんばってくれたか、Pawel には感謝でいっぱいです。 僕自身は Ming/Ruby に愛想をつかしています。今後は Pawel とその後の仲間たちにおまかせしようと思っています。ChangeLog 読んだら "Kazuki" さんが重要な仕事をしてくださったみたいで、 Kazuki さんにも感謝しています。って Kazuki さんって誰? もともと Ming の Ruby ラッパを作ろうと思ったのは、博士後期課程の研究がうまくいかなかったときの逃避行動でした。当時、SWF は出来たてほやほやのテクノロジで将来を感じさせ

  • 仕様に基づいたテストスイーツを書く - Inemuri nezumi diary(2007-08-22)

    _ 独りで始める Concrete and Specific Programming(CSP) エクストリーム・プログラミング(XPとして知られている)は、ビジネス側と開発側の両者が共通の達成可能なゴールに集中するための、ビジネス及びソフトウェア開発の規律である。 Kent Beck [XPエクストリームプログラミング実行計画(The XP Series), Kent Beck and Martin Fowler, Foreword by Tom DeMarco 序言より引用] このエントリでは、開発側の夢を実現するためのプログラミング技術 Concrete and Specific Programming を提唱します。 趣味としてのプログラミングは、ビジネスとは無関係です。それは、人生に与えられた有限の時間の使い道として、あなたが選んだ選択肢です。なぜ、プログラミングを趣味とするのか、

  • いまさらTDDを見直す - Inemuri nezumi diary(2007-07-25)

    _ いまさらTDDを見直す いまさら「フェルマーの最終定理 (新潮文庫) 著:Simon Singh 訳:青木 薫」を読んだ*1。このはすごくいい。 このが指し示していることのひとつは、皆、汗かいて土木作業してたってことだ。ピタゴラス、ユークリッド、…、オイラー、ガウス、…、ソフィー・ジェルマン、…、志村=谷山…。 綺麗な命題/予想を産み出した彼/彼女らは、手を動かす計算をむちゃくちゃな量やってる。 型理論によれば、型は命題で、実装は証明にそれぞれ対応する。そして、テストは、実装の仕様記述の一部に対応する。具体例を計算することはテストすることだ、と言える。 つまり、XPとかTDDとか誰かが言い始めた2000年前から、数学家はひたすらテストファーストだったってこと。証明/予想を言い終えた後は、テストの結果は焼いて捨てたから残っていない。 反論もありそうなことを敢えて言うが、私自身、テスト

    takkan_m
    takkan_m 2007/07/25
  • Haskell のテスト環境 HUnit QuickCheck - Inemuri nezumi diary(2007-07-20)

  • Inemuri nezumi diary(2007-07-13)

    _ Open Source Conference 2007 Hokkaido 発表資料 少し遅くなりましたが、発表資料を公開します。slideshareは masuidrive さんのページから教わりました。これは便利ですね。 スライドにはありませんが、当日の質疑応答で「モナドがわかんね」という質問が出ました。これに対して、「do notation でプログラムを書くことに慣れればいいです」と答えました。いや、当は (>>=) と (>>) と return と fail がそれぞれ何を意味するものかをわかるほうがいいんですが、10分程度でそれをわかってもらうのは無理というものです。Hutton 流にいくなら、まず「State monad とは何か」から入るのがいいんじゃないのかなあ。あと、懇親会では、「Haskell のプログラムがどう動いているのか見えないのがキショイ」と言われました

  • Inemuri nezumi diary(2007-07-12)

    _ Simply Easy! We present an implementation in Haskell of a dependently-typed lambda calculus that can be used as the core of a programming language. We show that a dependently-typed lambda calculus is no more difficult to implement than other typed lambda calculi. In fact, our implementation is almost as easy as an implementation of the simply typed lambda calculus, which we emphasize by discussi

  • Arrowのこと - Inemuri nezumi diary(2007-06-22)

    _ Arrowのこと Open Source Conference 2007 Hokkaido の資料作り終えた。セミナーのほうはかなり初心者向きな講演になると思う。けど… あろはさんみたいな人ばかり来たらどうしようと思ったので Arrow の復習もしておいた。 小さな部屋らしいから、「Arrowというものが世の中にはございまして、Kleisli 圏やら Premonoidal 圏がどうのこうの…」とか言っておけばよかろうと考えた。これでも甘いと言われたら Functional Reactive Programming とかですか(だんだん偉大なる Shelarcy さんに近づく例)。 Hello, world を Arrow で 2 種類書いておく。一つは Control.Arrow モジュールに基づくもの、もう一つは -f arrows しないと通りません*1。 import Cont

  • http://madscientist.jp/~ikegami/diary/20070612.html

  • Haskell の "printf" デバグ - Inemuri nezumi diary(2007-05-11)

    _ Haskell の "printf" デバグ StateモナドとかIORefとか使うプログラムだと、実行時中に中身を覗きたくなる。ある人が unsafePerformIO で print するとか言うので、それはちょっと待てと。Haskell がその手のデバグがしにくいので、他の言語に移るというのは、ちょっとだけ待ってほしい。 Haskell には Debug.Trace というモジュールがあって、その中の trace :: String -> a -> a は、IO を気にせずに文字列を標準エラー出力に出せるのですよ。 import "Debug.Trace" main = trace "Good morning" $ print "Hello, world" zsh% runghc TracingHello.hs 1> out.txt 2> err.txt zsh% cat out

  • Inemuri nezumi diary(2007-04-04)

    _ 論理的思考の実践 昨日のエントリに引き続いて。 何事も言うだけなら、誰にでもできます。 そこで昨日のエントリの具体例を見てみましょう。 彼が「論理的思考の放棄」と題したので、私はアンチテーゼとして「論理的思考の復興」という タイトルをつけました。 しかし、私の気持ちとしては、「関数型プログラミングの復興」という タイトルのほうがふさわしいと考えます。というのは、「論理型プログラミング」は普及した概念であり、 それは「論理的思考」でもあるから、誤解を招きやすいのです。 Pólya の『いかにして問題をとくか』は数学の問題を解くための手段の一つであり、 関数型プログラミングは数学にかなり近いのです。したがって両者の親和性はとても高い。 _ 関数型プログラミングの実践 関数型プログラミング言語 Haskellは確実に流行りつつあります。 なぜならHaskellはサイコーだから。それ以上に理由

  • Inemuri nezumi diary(2005-07-28)

    _ A cat in Haskell MacOSX 10.4.2 の /usr/bin/cat の振舞いを真似た Haskell コードを書いた。`cat --verssion` によれば、"cat (textutils) 2.1" とのことなので GNU textutils なのだろう。元の C のコードを読んでいないので、もしかすると振舞いが違っているかもしれない。 module Main where import Control.Monad (liftM2) import Data.Char (chr, ord) import Data.List (groupBy, mapAccumL, nub) import Data.Version (Version(..), showVersion) import System.Environment (getArgs) import Syst