Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2010-07-12

(34)TAO LISPについて(1979)

| 08:14 | (34)TAO LISPについて(1979) - わだばLisperになる を含むブックマーク はてなブックマーク - (34)TAO LISPについて(1979) - わだばLisperになる

いつもはまったりとCiNiiのLISP関係の論文を漁っておりますが、情報学広場:情報処理学会電子図書館 というところでも論文のPDFが読めるようになっているのをみつけました。

以前からTAO関係で読んでみたいなと思っていたものがあるので、早速眺めてみます。

本文のTAOは、PDP-11/60上での実装のため、TAO/60と呼ばれるらしいです。

色々特徴がありますが、まず、関数は、当時のLISP処理系の慣習だとLAMBDAで初まるLISTとして表現されていましたが、TAO/60では、指定されたVTITLE(ベクターの標識/SYMBOLでいうプロパティのようなもの?)を持つベクターが関数になるとのことです。

ここから、配列は、添字を引数とする関数、大域変数は引数の無い関数、という解釈が導かれるとのこと。

ベクターが添字を引数とする関数になるというのは、Clojureのような動きですね。

また、関数の定義で、CLでいう&OPTIONAL、&RESTなどに加え、引数を評価しない書法がある様子。

(DE F (X (Y 0))
  (LIST X Y))

(F 8) ;=> (8 0)

(DE F (X REST Y)
  (LIST X Y))

(F 8 9 0 1) ;=> (8 (9 0 1))

(DE F (X 'Y)
  (LIST X Y))

(F 8 A) ;=> (8 A)

また、複値形式(Double Valued Form)というのがあり、

;; 
(:X (+ X 1))

;; Aは(1 2 3 4 5 6)のようなベクター

(:(A 3) 0)

A ;=> (1 2 3 0 5 6)

という風にCLでいうSETFのように振る舞うようです。TAO/ELISでは、!で書いているのと同じものでしょうか。

この形式は、値と、どこに書き戻したら良いのかという二つの情報を持つので複値形式と呼ぶようです。

TAO/60では、この複値形式を駆使している様子。

その他、変数のスコープ等、色々興味深い内容です。

ゲスト



トラックバック - http://cadr.g.hatena.ne.jp/g000001/20100712