#:g1: common-methodsの紹介

Posted 2014-12-28 15:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の363日目です。

common-methodsとはなにか

 common-methodsは、Ryan Pavlik氏作のRubyにインスパイアされたCommon Lispのメソッド定義/構成のためのライブラリです。

パッケージ情報

パッケージ名common-methods
Quicklisp×
レポジトリrpav/common-methods · GitHub

インストール方法

 Quicklispには収録されていません。
githubからダウンロードしてQuicklispのlocal-projectsに置けば

(ql:quickload :common-methods)

できるようになります。

試してみる

 以前、incongruent-methodsを紹介した時に、Orivej Desh氏よりcommon-methodsというものがあるよと教えてもらっていました。
Lisp Library 365も終盤なので紹介しておきます。

 まずcommon-methodsの機能としては、incongruent-methodsの機能をほぼ包含している感じです。
実現方法は若干違いますが、可変長引数でメソッドをディスパッチさせるのにコンパイラマクロを利用する点などは共通しています。

(cm:def* plus ((x number) (y number))
  (+ x y))

(cm:def* plus ((x string) (y string)) (concatenate 'string x y))

(plus "foo" :y "bar") ;=> "foobar"

(plus 1 :y 2) ;=> 3

(cm:def* plus (x) x)

(plus 'zoo) ;=> ZOO

 また、名前がstring=なら同一の関数として呼べるという、incongruent-methodsのdefine-shared-methodは、common-methodsでは、共有用のcm-methods(m)パッケージに定義するというのが対応しているでしょうか。

 その他の機能としては、一般的な多重ディスパッチでないオブジェクト指向システムの書き具合を再現しようとしたものが多いようです。

まとめ

 今回は、common-methodsを紹介してみました。
Common Lisp純粋主義者は気に入らないだろうと前置きがありますが、まあ他の言語の便利な機能を取り込んだり実装するのも一興ですよね。

comments powered by Disqus