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 |

2011-03-30

CMU AIレポジトリ探検 (5) CommonORBIT

| 19:05 | CMU AIレポジトリ探検 (5) CommonORBIT - わだばLisperになる を含むブックマーク はてなブックマーク - CMU AIレポジトリ探検 (5) CommonORBIT - わだばLisperになる

今回は、CommonORBITの紹介です。

CommonORBITについては、2年ほど前に紹介したことがあるのですが、80年代中盤頃に作成されたCL上のオブジェクト指向システムです。

CommonORBITの特徴としては今でいうプロトタイプベースであるということが挙げられます。

同時期のCLのオブジェクト指向拡張であるLMIのObject Lispもプロトタイプベースだったようなのでプロトタイプベースのものも結構あったんだなというところです。

近頃だと、Sheepleのようなものもあります。

動作例ですが、手抜きで以前に紹介したものを再掲します。

(in-package :corbit)

(defobject template
  (op1 :function (self str) "")
  (op2 :function (self str) "")
  (template
   :function (self str) (op2 self (op1 self str))))

;; concrate-1作成
(defobject concrate-1 template)

(defaspect op1 'concrate-1
  :function (self str) (string-upcase str))

(defaspect op2 'concrate-1
  :function (self str) (format nil "**~A**" str))

;; concrate-2作成
(defobject concrate-2 template
  (op1 :delegate 'concrate-1)
  (op2 :function (self str) (format nil "//~A//" str)))

(template 'concrate-1 "foo bar baz")
;=> "**FOO BAR BAZ**"

(template 'concrate-2 "foo bar baz")
;=> "//FOO BAR BAZ//"

もっと色々できますので、興味を持った方はお試しあれ。

今回も紹介ついでにASDFに対応させgithubに上げてみました

git clone git@github.com:g000001/CommonORBIT.git

でソースを取得でき、適切に設定すれば、

(ql:quickload :commonorbit)

でロードできます。