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 |

2008-02-04

idfnとidentityとcr

| 02:37 | idfnとidentityとcr - わだばLisperになる を含むブックマーク はてなブックマーク - idfnとidentityとcr - わだばLisperになる

ArcではCommon LispやSchemeのidentityが、idfnという名前になりました。

どうせなら、idくらい短かくなってしまえば良いのになどと思ってしまいますが、そんなに頻繁に使うわけでもないので、4文字位に収まっているのでしょう。

このidfnという省略名を見て思い出したのが、HHKでお馴染の和田英一先生の和田研究室が1980年代に開発したUtiLispのCRという関数。

このCRは、CAR、CDRと同じ系統のものです。

CARが1番目の要素を参照し、CDRがその残り…ということをC...Rと書けるならば、0番目を参照するということはCRと書けるんじゃないか、それで、0番目が指すものは何だってことになると、そのオブジェクト自身のことだ、ってことなのでしょうか。

それで、このCR関数なのですが、UtiLisp特有の物かと思っていたら、UNIVAC 1100 Lispという1960年代後半にUNIVAC 1100というメインフレームに移植されたLISP 1.5系のLispにも存在していました。

UtiLispは、UNIVAC 1100 Lispから影響を受けたのか、それとも、LISP 1.5にはそういう方言があったのか、はたまた、両者無関係にC...Rの類推から思い付いたのか、知る由もありません(笑)

※また、この上なくどうでも良いことなのですが、このUNIVAC 1100 LispにはDOがあるのですが、これは、Arcdoと全く同じもので、40年前に先輩がいたというのも面白い。

1960年代位までのCAR、CDR関数の捉えられかたは、今のFIRSTと、REST関数と同じもの、というものとは、ちょっと違っていたんじゃないのかなあと、個人的には思っています。

例えば、PDP-1 LISPでは、シンボルのCDRには、プロパティが収められていて、関数の場合は、関数の定義が入っていますし、PDP-6 LISPでは、それに加えて、シンボルのCARは、何に使うのか良く分かりませんが、オブジェクトのアドレス -1の数値です。何というかもっとアドレス演算子っぽい雰囲気があるんですが、CRもそういうところから出てきた気がしています。

ちなみに、UtiLispの最新版Utilisp/C 1.14は、ソースが公開されていて、32bit Linuxでさっくり動作します。綺麗なマニュアルも付いてきますので、是非お試しあれ!

ゲスト



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