タグ

ブックマーク / propella.hatenablog.com (8)

  • アラン・ケイ - 「ソフトウェア工学」は矛盾語法か? [対訳版] - 言語ゲーム

    http://metatoys.org/oxymoron/oxymoron.html 京大でこないだのアランさんの講演 http://d.hatena.ne.jp/squeaker/20090120#p1 があった後に、kckm さんが 今回の話と http://d.hatena.ne.jp/sumim/20080806/p1 で紹介されていた「Is "Software Engineering" an Oxymoron?」の関連についてつぶやいていた のでなるほどと思って読み返してみました。ついでに暇だったので訳しました。といってもほとんど sumim さんの箇条書きを単に並べただけで新しい情報は無いですが、箇条書きが嫌いな人には読みやすいかと思います。間違っている場所があったら教えてください!また、この日記は下書きという事にして、読みやすくした分を http://metatoys.org

    アラン・ケイ - 「ソフトウェア工学」は矛盾語法か? [対訳版] - 言語ゲーム
  • エディタのデザイン - 言語ゲーム

    金曜日にプレゼンがあって、久しぶりに徹夜した物だから週末はめちゃくちゃしんどかった。ので、今日はほとんど一日寝ていた。まだしんどい。が、せっかくなので内部でプレゼンしたスライドをアップする。 エディタのような普通のアプリをどうやったら綺麗に記述出来るだろうかという話です。まー例えば入力が元のテキストとキーボードイベントで、出力がテキスト画像と変更後のテキストであるような関数をエディタだと考える事が出来ます。 これを素直にプログラムで書くと、こんな感じになります。上からイベントがやってきて、テキストの内部表現(TextBuffer)を変更します。それを画面に表示するにはレイアウト用のデータ構造(TextView)を作成して、さらにビットマップに変換してデバイスに送ります。確かに単純ですが、これを副作用抜きで毎回オブジェクトを作るとなると遅すぎて動きません。数百文字で挫折します。 という事で、

    エディタのデザイン - 言語ゲーム
  • 論文読み David A. Fisher. A survey of control structures in programming languages. 1972 - 言語ゲーム

    http://portal.acm.org/citation.cfm?id=987361.987363 概要 プログラミング言語で使われる様々な制御構造を取り上げたカタログです。 マシンレベルの制御機構 branch 分岐 : 条件に応じて命令をスキップする。 control transfar 移転 : 別の場所へ制御を移動する。 instruction modification 書き換え : データをプログラムとして実行する。 プログラムレベルの制御構造 go to : 別の場所を制御を移動する。 iteration : 条件に応じて繰り返し実行する。 subroutines : 同じプログラムを複数の箇所から実行する。 open subroutines : 参照元を subroutines で置き換える。マクロ。 closed subroutines : 移転によって subrouti

    論文読み David A. Fisher. A survey of control structures in programming languages. 1972 - 言語ゲーム
  • Haskell で brainfuck - 言語ゲーム

    ふと思い立って Haskell で brainfuck を書いてみた。そんな事やってる人は沢山いると思うので、一つ制限をつけた。モナドは main 関数の中だけしか使わない。つまり、後は全部副作用なしでやる。 それから、大体の方針を立てた。brainfuck の文法はとても単純なので、もしかしてパーサすらいらないんじゃ無いかと思ったのだけど、ループがある関係上やっぱり最初に構文木を作ったほうがやりやすい。という事でオーソドックスに、ソースコード -> 構文木 -> 実行、と言う順序で進める事にした。 -- Parser data Command = Inc | Dec | Next | Prev | Put | Get | While [Command] deriving (Show, Eq) type Program = [Command] parse :: String -> Prog

    Haskell で brainfuck - 言語ゲーム
  • Gauche のオブジェクトのなかみ - 言語ゲーム

    暇だったので Gauche のマニュアルを読んでいると、めっちゃ面白い事が分かった。特に、Smalltalk みたいなちゃんとしたオブジェクトがある所。今まで lisp はどれも emacs lisp と似たようなもんだと思ってたのでびっくり。そこで、http://squab.no-ip.com:8080/wiki/835 を基に、Gauche のオブジェクトを覗いてみた。 Bank Account まず Gauche のクラスを使って預金口座 を作る。define-class にクラス名と親クラス、そして要素の名前を書く。そして make で新しいインスタンスの作成。gosh 内では、さらに describe (d) を使って中を覗く事が出来る。 gosh> (define-class <bank-account> () (dollars)) <bank-account> gosh> (

    Gauche のオブジェクトのなかみ - 言語ゲーム
  • 継続渡し形式(CPS)変換とは何か? - 言語ゲーム

    継続とは何かが分かったので、継続渡し形式とは何かについて調べてみた。 http://karetta.jp/book-node/kahua-seminar2/000511 を読むと、CPS に call/cc は必要無い事が分かった。がっくり。と言う事で、このページの例を Haskell と Squeak に写経しながら勉強。 -- 階乗の Haskell 再帰版 fact 0 = 1 fact n = n * fact (n - 1) -- CPS 版で書くとこうなる。(fact_cps 10 id => 3628800) fact_cps 0 cont = cont 1 fact_cps n cont = fact_cps (n - 1) (\a -> cont (n * a)) Scheme より滅茶苦茶分かりやすいのはパターンマッチの威力か。ちなみに Squeak Smalltalk

    継続渡し形式(CPS)変換とは何か? - 言語ゲーム
  • [haskell] How To Arrow2 並置 - 言語ゲーム

    import Control.Arrow newtype SF a b = SF {runSF ::[a]->[b]} instance Arrow SF where arr f = SF (map f) SF f >>> SF g = SF (f >>> g) first (SF f) = SF (unzip >>> first f >>> uncurry zip) -- ではややこしい話の前に、Arrow の利点を強調する例。向こうからやって -- 来た数字の値を二倍したい。やってくるのは数字と分かっているが、数字 -- は一つかも知れないし、リストに入っているかも知れないし、IO 操作に関 -- する物かも知れない。なんと Arrow を使うと、同じ定義が、リストにもス -- カラにも(多分モナドにも)使える!ここ感動する所です! double :: (Arrow a, Num b)

    [haskell] How To Arrow2 並置 - 言語ゲーム
  • [haskell] How To Arrow 基本 - 言語ゲーム

    http://d.hatena.ne.jp/propella/20070807/p1 1:基 http://d.hatena.ne.jp/propella/20070807/p2 2:並置 http://d.hatena.ne.jp/propella/20070808/p1 3:選択 -- なんか知らんうちに Arrow 流行ってるようなので試してみる。 -- http://www.cs.chalmers.se/~rjmh/afp-arrows.pdf によると、ポイントフ -- リースタイルに IO を混ぜるのが Arrow だと考えればよいらしい。 import Control.Arrow -- Arrow では高階型を使いまくるので慣れないとちょっと恐ろしく見える。 -- Arrow は Monad と同じくクラスだが、Haskell で言うクラスとは他でいう -- インタフェース

    [haskell] How To Arrow 基本 - 言語ゲーム
  • 1