CMU AIレポジトリ探検 (5) CommonORBIT — #:g1

Posted 2011-03-30 10:05:00 GMT

今回は、CommonORBITの紹介です。
- (http://www-2.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/lisp/oop/non_clos/corbit/0.html)
CommonORBITについては、2年ほど前に紹介したことがあるのですが、80年代中盤頃に作成されたCL上のオブジェクト指向システムです。
-(http://g000001.cddddr.org/1226963198)
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に上げてみました
-(https://github.com/g000001/CommonORBIT)
git clone git@github.com:g000001/CommonORBIT.git
でソースを取得でき、適切に設定すれば、
(ql:quickload :commonorbit)
でロードできます。

comments powered by Disqus