2004-01-01から1年間の記事一覧

変数テーブル

;変数テーブルglobal開始 (define x "X") (define incr #t) ;変数テーブルlet開始 (let ((x 0)) (set! incr ;変数テーブルlambda開始 (lambda () (begin (set! x (+ x 1)) x)) ;変数テーブルlambda終了 )) ;変数テーブルlet終了 (incr) ;変数テーブルlambda…

CPS

Schemeの継続を実装するためには継続をオブジェクトとして扱わなくてはならない。そして、継続をオブジェクトとして扱うのならばCPSへの変換として書くのが良いのではないか(というより、他の書き方を思いつかない)。 以下はメモ。 まず、演算の最小要素とし…

Method (and etc.) dispatch

((object 'symbol) args...) => (method args...) => returnValueここではobjectとmethodの双方に対してほぼ等価な構文を利用している。objectはシンボルを受け取り、methodは引数のリストを受け取るという点だけが唯一異なっており、Method dispatchによっ…

オブジェクトの動き

((object 'method) args...) という(最も単純な)構文を思いついた。Javaの構文と結構似ているような気もする。 (define make-closure (lambda (_x) (let ( (x _x) ) (lambda (method . parameter) (cond ( (eq? method 'x) x) ( (eq? method 'setx1) (lambda…

シンボルの扱い

Schemeのシンボルはあくまでもシンボルというデータ型の一つにすぎない。しかし、同時に変数の識別子としても利用されており、評価するとそのシンボルに束縛された値を返すようになっている。 このようにlisp/Schemeでは一つの要素であってもその局面に応じ…

Scheme to Java

SchemeからClassを定義するのなら必然として動的なものになる訳で、プロトタイピングには便利かもしれない。さらに、それをcompileしてJavaに還元する(とか出来たら良いな)。

名前空間

Javaではfieldとmethod(とclass)の名前空間が区別されている*1が、Schemeでは値と関数の名前空間が区別されていない。適当に擦り合わせておいた方が良いだろう。 (class 'classpath)でJavaのクラスを得る。 (object 'field)でobject.fieldを得る。 問題はobj…

クラス階層

Scheme側のデータ型もjava.lang.Objectを継承している。つまり、Scheme Nativeな要素は実装上、同時にJava Nativeなオブジェクトである。この場合、 Scheme Nativeな要素をJavaの継承ツリー上では例外事項として扱い、Java Nativeなオブジェクトとしては扱わ…

Scheme on Java

正月にでも真面目に実装してみようかな。という訳でその方針を考えてみる。 Schemeベース データ型、ペア、……など、Scheme Nativeな要素はそれぞれ一つのクラスとして実装 Scheme-Java接続 Java Nativeなオブジェクトは関数として扱う*1 Javaのprimitive値は…

reflection

reflectionのようなことをJavassistで行えば、確実に生のJavaと同じ速度が出せる。ただ、現行のreflectionもJITが効けば充分に速いのだから、Javassistによるメモリ消費が問題になるかもしれない。……それ以前にライセンスの問題があるな。

型と契約

私が考えていた型は「契約をオブジェクト化したもの」だったことに思い至った。

Scheme風実装

Scheme風味のスクリプトをjavaで実装してみた。特徴は以下の通り。 GCはjavaに任せる。 javaのreflectionを多用した。*1 継続は未実装。 *1:displayがjava.lang.System.out.printlnへの参照(とその実行方法)だったり。

リアリズム(続き

Q.なぜ演出術としてのリアリズムが演出の放棄を言明するものにすぎないのか。 A.そもそも近代小説はリアリズムを前提としているからである。*1 *1:やる気低下中

Merd

http://www.kmonos.net/alang/etc/merd.php 何というか、私の考えていたものにかなり近いものを発見。

Scheme

最近はSchemeを触っているのだが、何でも出来る言語はその分だけ可能性を考慮しなくてはならないために使いにくくなるのではないかと思う。 大概のプログラミング言語はチューリング完全(というよりもチューリング完全でなければプログラミング言語として失…

リアリズム

リアリズムとは愚者の演出術である(言い過ぎ)。 リアリズムに基づいた演出がそれ自身何者かを生み出すことは稀だ。もちろん、既に存在する何者かを伝えるためには最良の手法になるのだから一概に否定することも出来ないのだが、少なくとも演出術としてリアリ…

非理想的読者

読者の大半は、作者の思っているような理想的読者/消費者ではない。以下では非理想的読者を類型化してみよう。 うっかり 彼らは熱心な読者である。作品の序盤(彼らが物語に没入する五分ばかり前のことだ)に説明された事柄を終盤まで覚えていることは少な…

ジャンル論

ジャンル論は常に不毛である。譬えるならそれは交雑種間の分類学だからである。 生物分類学の場合、古代から近代までに亘って博物学の知識に基づいた分類が行われてきた。そのため、発見者の印象だけで決めるなど、恣意的な判断が繰り返されてきた。それに対…

条件(追加)

事前/後条件について一つ重要なことに気が付いた。 パラメータ付き型整合性による検証が(より原始的な)assertによる検証よりも優れているのは、事前/後条件が外部に公開されているという点である。

キャスト→型マッチング

型マッチングを構文に含めば*1ダウンキャストを無くせるような気がする。 if( object instanceof TypeA){ TypeA objectAsTypeA = (TypeA) object; // do Something. } else if( object instanceof TypeB){ TypeB objectAsTypeB = (TypeB) object; // do Some…

条件

引数の型は事前条件の一種だ。返値の型は事後条件の一種だ。と思いついてから検索したらEiffelが出てきた。 「厳密な事前/後条件が成り立っているかどうか」を調べるためには動作条件での検証が必要になるのだが、動作条件での検証では「事前/後条件が常に…

型と集合の区別は要らないこともない。

Haskellを見て思った。集合と型はしばしば等しい。 Boolean型は[true, false]という集合に等しい。Integer型は[MinimumInteger,MinimumInteger+1,...,MaximumInteger-1,MaximumInteger]に等しい。実際には任意長の配列など、要素の数が有限個に収まらない*1…

メソッドとフィールドの区別も要らない。

smalltalkを見て思った。メッセージングが明確であれば充分だ。 object.method(); object.field; とはつまり、 object メッセージング先 .method,.field メッセージ(.がメッセージング記号、method,fieldがメッセージ内容) () これもメッセージ

式と文の区別は要らない。

lispを見て思った。式と式とのセパレータさえあれば充分だ。 式1;式2;...;式N は文がN-1個と式が1個ではなく、複数の式を列挙した一つの式だとみなしても構わない。 (begin 式1 式2 ... 式N) と同じような感じ。

メタ(さらに続き)

さて、「メタフィクション」である。 「フィクション」とは散文形式で書かれた創作物語全般である。一般に「メタフィクション」と呼ぶときには創作物としての側面について着目し、なおかつ「フィクション」という語を再帰的に適用した「メタ創作」的創作物語…

メタ(続き)

「メタ○×」という言葉が通じるには「○×」に関する共通認識が必要である。 「○×」が具象物である場合にはそれなりに共通認識が得られる可能性が高い。私が今打っているキーボードが「私が今打っているキーボード」であることについて共通認識があるとは必ずし…

メタ

一口に「メタ」と言ってもその内実は様々である。そもそもが接頭辞という非独立語であることからも連想出来るように、その後に続く言葉が象徴するものによって初めてその意味が定まる。「その後に続く言葉が象徴するもの」が多義的であればあるほど、メタ○×…

可能性物(仮)と伏線

可能性物(仮)の利点とは情報量の適正化が計れることである。情報量の適正化された物語は少なくとも以下の三点で優位である。 伏線の存在を気付かせやすくなる。 伏線の活用を納得させやすくなる。 メタレベルでの記述が混入しにくくなる。*1 *1:メタレベルの…

可能性物(仮)の情報量

可能性物では選択肢を任意の数に調整することが出来る。つまり、より、のときにGainの最大値という値が得られる。Costの評価が読者によって異なることは明らかなので、ジャンルの違い、つまりは対象とする読者層の違い、に応じて選択肢の数を増減させるとよ…

情報量

民話では能力や可能性という観点自体が希薄である*1。全ての出来事は起こるべくして起こるのであり、そもそも選択肢自体が存在しない。 逆に近代小説では各登場人物が内面を持ち/持つことになっており、作者の都合を別とすればあらゆる選択肢を選ぶことが出…