2008-03-01から1ヶ月間の記事一覧

近況とか

最近、ガウディ本をスローペースで読み進めている。抽象度が高くて難しい。Gauche本とかHaskell本とか具体的な本を読んで色々実験して理解した方がプログラミングテクニックが身に付くような気がしてきた。ガウディ本は読むのに時間かかり過ぎるし。結局、SI…

Sequence Comprehensions

シーケンス内包表記?は、以下のように書ける。 scala> for (i <- List.range(1, 10) if i % 2 == 0) yield i res1: List[Int] = List(2, 4, 6, 8) 以下のように使用することができる。 scala> val L = for (i <- List.range(0, 10) if i % 2 == 0) yield i …

関数定義

ryugateの日記: 関数定義について (http://d.hatena.ne.jp/ryugate/20080117#p2) def hoge() { "hoge" }とdef piyo() = { "piyo" }の違いはdef hoge() { "hoge" }は返り値が無い。 なるほど。Scalaは複数の書き方ができるので、どれを使うべきか迷う。関数定…

型の利用法

lethevert is a programmer: 変数の型は2つの異なるレベルの概念が混在しているような気がする (http://d.hatena.ne.jp/lethevert/20051224/p1) 以下、自分用に整理してみる。 1. 計算機の物理的な演算機能やデータ形式を、コード上で明示する 2. 抽象的な…

Gauche本

『プログラミングGauche』を購入した。まだ読んでないが少しずつ読み進めるつもり。

状態を変えないで状態を表現する

状態を変えないとは、a = a + 1 のような処理を禁止する。つまり、変数が初期化のみ可能で、再代入できないようなことを言う。関数型言語では、この性質を「純粋」であるという。 Pythonで、以下のforループはインデックス i の値が状態を変えながら、i*2 を…

ブロックを表現

関数型言語Cleanでは、以下のように、局所的な関数を定義できる。関数定義 where [局所関数定義] Cleanの // Clean add_square a b = a2 + b2 where a2 = a*a b2 = b*b は、Pythonでは以下のように表現できる。 >>> lambda a, b: [a2+b2 ... for a2 in [a*a]…

静的、動的、型安全

メモ。かなり分かりやすい。 ohai日誌: 「型」に関して (http://www.kmc.gr.jp/~ohai/diary/?date=20050517#p02)

ローカル変数の具象、抽象

航海日誌: 静的型付け言語で,型は最後にダウンキャストしろ (http://cappuccino.jp/keisuken/logbook/20080304.html#p01) ここをエントリポイントとして、keisuke_nさん、kwatchさん、odzさん、lethevertさんが色々議論している模様。勉強になる。大雑把に…

implicit

航海日誌: 型変換する事によって,機能を拡張する (http://cappuccino.jp/keisuken/logbook/20080217.html#p01) なるほど。implicitってこう使うのか。しかしimplicitを意識していない人には黒魔術的だなあ。Scala使用する場合は、暗黙の型変換のパターンを…

箱モデルと名札モデル

d.y.d: auto (http://www.kmonos.net/wlog/83.html#_1547080311) 変数に「オブジェクトに名前を付けるもの」と「式に名前を付けるもの」に関して、 前者の感覚で使う変数もあれば後者の感覚で使う変数もあって、みんな、基本的には前者なら型を書くし後者な…

cons, car, cdr

リストのcons, car, cdr。 scala> 1 :: List(2, 3) // cons res0: List[Int] = List(1, 2, 3) scala> List(1, 2, 3).head // car res1: Int = 1 scala> List(1, 2, 3).tail // cdr res2: List[Int] = List(2, 3) もちろん、配列は不可能。 scala> 1 :: Array…

Joel on Hiring

Joel Spolskyの『ソフトウェア開発者採用ガイド』をアマゾンで予約した。『BEST SOFTWARE WRITING』も捨てがたかったが、Joel自身が書いた訳ではなかったので保留。 あと、川合史郎さんの『プログラミングGauche』も欲しいが、とりあえず保留。目次を見ると…

正格性

Clean入門(15):正格性 (http://www.geocities.jp/lethevert/clean/gettingStarted15.html) 正格性の記事を読んで、遅延評価が万能ではないと分かった。遅延評価では引数が後に評価されるので計算の中間式がメモリに展開されてしまう。計算するリストの要素…

遅延評価

Clean入門(14): 評価戦略 (http://www.geocities.jp/lethevert/clean/gettingStarted14.html) 評価戦略の記事を読んで遅延評価の仕組みがよく分かった。「最左最外簡約」という用語は分かりやすい。しかし、call-by-name(名前呼び)やcall-by-need(必要呼び)…

ozengine.exeのエラー

自宅のノートパソコンでMozartを試したらOKだった。Mozartを使用するにはemacsが必要だった。Mozartのダウンロードページと同ページでemacsをダウンロードしてインストールした。しかし、会社のデスクトップでやるとemacsを入れても相変わらずozengine.exeで…

関数型言語の勉強

Clean入門: lethevertの純粋関数型言語Concurrent Clean覚え書き (http://www.geocities.jp/lethevert/clean/gettingStarted01.html) Clean言語の勉強をしているが、「Clean入門(12):多相性・型クラス」あたりで急に難しくなった。やはり型に関する部分は難…

CTMCP(ガウディ本)の誤訳

k.inabaさんの伝言板経由で知ったのでメモ。 http://iiyu.asablo.jp/blog/2007/11/14/1908371 http://iiyu.asablo.jp/blog/2008/03/03/2686540 この間違いはひどいなあ。歴史に残る偉大な本の価値を下げているなあ。気をつけて読まないと間違えて覚えるとこ…

3.0a3

Pythonの以下のバージョンがリリースされたらしいが、調べる時間がない。3.0出たらしばらく安定して欲しいなあ。 2.5.2(final) 2.6alpha1 3.0alpha3

オブジェクト指向プログラミングの設計

昨日の日記の通り、「捨てられる」とか「局所化する」という発想は重要。これはモジュール化につながる。よく多重度の設計を間違えたとか、継承より集約を使用した方が良かったとか設計ではそういうことを考えがちだが、捨てられる部分であれば大きな問題に…

ローカルクラスという考え方

先日、手続き型プログラミングをしていて手続き型言語ではうまく組めないところがオブジェクト指向言語では、すっきり組めることに気がついた。 それは、関数の定義内の途中経過で出てくる変数の値を関数の呼び出し側でも使いたい場合に問題が発生する。通常…

Mozart

『コンピュータプログラミングの概念・技法・モデル』、いわゆるガウディ本を購入して読み始めた。早速、会社のデスクトップにMozart 1.3.2 for Windowsをインストールしたが、エラーで起動できなかった。原因分からない。自宅で勉強するつもりなので良いが…

Peter Norvigの記事

メモ。明日読む。 プログラミングを独習するには10年かかる (http://www.yamdas.org/column/technique/21-daysj.html) 追記(2008/3/3):良いところを抜粋。 Alan Perlis はかつて、「プログラミングに対する考え方に影響を与えないような言語は知る価値はない…