2010-12-01から1ヶ月間の記事一覧

メモ #3

関数とは、任意のパラメータから任意の値への写像である。オブジェクトとは定数関数(メンバ変数)や関数(メソッド)の集合であり、またオブジェクトそれ自体が識別子からメンバ(変数、関数)への写像である。オブジェクトは0個以上のスロットを持つ。スロ…

メモ #2

Literal リテラル(によって生成された値)を指す。自身の値を指す @value という属性を持つ。 Identifier 識別子。特別なリテラルと考えられるので、Literal を継承する。別のリテラル(Identifier も含む)を参照し、値として持つことが可能。また、自身の…

メモ #1

Identifier も Literal も値でありどちらも「参照される」ことは可能だが、 Literal は「参照する」ことはできない。つまり "hoge" というリテラルは常に同じオブジェクトIDをかえす。言い換えると Identifier は自身の文字列表現を表す @name という属性を…

強いメッセージ指向言語、Sketchy

コップ本を買って Scala のおもしろさがわかってきたのと、言語のデザインについてあれこれ考えていたこともあって、ちょっと Scala で処理系をつくってみようとおもいます。 JavaScript のような辞書と関数による単純な設計 Io をも越える強いメッセージ指…

メモ

メッセージングによる代入 - #!/usr/bin/env japanese - Teq.gこれのつづき。 スコープ(パッケージという概念) 他の言語への言及(Io や JavaScript)

メッセージングによる代入

代入をメッセージングで表すことを考えてみる。代入は、左辺に識別子をとり右辺に値をとる等式で表現できる。 ident = value つまり代入とは、識別子というオブジェクトに "=" というメッセージセンドを行っていると解釈できる。Rubyで実装してみる。 #!/usr…

多重代入

val a, b = 0 // a -> 0, b -> 0 val c, d = (1, 2) // c -> (1, 2), d -> (1, 2) val (e, f) = (3, 4) // e -> 3, f -> 4 val (g, _) = (5, 6) // g -> 5 val (_, i, _) = (7, 8, 9) // i -> 8 val j :: k :: _ = List(10, 11, 12, 13, 14, 15) # j -> 10, …