#:g1: Quicklispのライブラリのメソッドコンビネーションを眺めてみよう

Posted 2018-12-19 18:37:02 GMT

Lisp メソッドコンビネーション Advent Calendar 2018 20日目 》

これまでメソッドコンビネーションの定義方法の解説や実際に定義してみたりをしていましたが、メソッドコンビネーションが実際にはどのように使われているかをQuicklispのライブラリ中から探して眺めてみましょう。

method-versions

メソッドコンビネーション: method-version-method-combination

メソッド修飾子でメソッドのバージョンを表現したというもの。
確かにメソッドのまとまりをメソッドコンビネーションの枠組みを使えばバージョンごとに起動したりの管理ができます。
なかなか面白いアイデアですね。

clweb

メソッドコンビネーション: join-strings

文字列を連結するメソッドコンビネーションのようです。
大分限定された使い方ですが、appendnconcも標準にありますし、そんな感じの気分なのでしょう。

mcclim

メソッドコンビネーション: values-max-min

標準でminmaxはありますが、多値で両方を返してくるというものです。

chanl

メソッドコンビネーション: select

CSPライブラリのchanlですが、プロセスの制御をメソッドコンビネーションで表現しているようです。
並列処理とメソッドコンビネーションで色々探してみたのですが、chanlで使われていたとは。
修飾子にsendrecv がありますが、結構活用している事例かもしれません。

3b-swf

メソッドコンビネーション: swf-part

swfファイル生成ライブラリですが、daemon各々を:most-specific-lastで起動するもののようです。

serapeum / arnesi

standard/context / wrapping-standard

もとネタは、Tim Bradshaw氏のwrapping-standardメソッドコンビネーションのようです。
standardメソッドコンビネーションの周囲を:wrap-aroundでさらに囲みます(serapeumでは:context)
:wrap-aroundはデフォルトでは、:aroundと逆順の:most-specific-lastです。

filtered-functions

filtered-functionsをメソッドコンビネーション活用の方向から眺めてみましたが、どちらかというと、メソッドコンビネーションより前の段階に工夫がある感じでした。
filtered-functionsについては過去に紹介記事がありますので、そちらをどうぞ。

method-combination-utilities

primary / lax / basic / append/nconc

メソッドコンビネーション定義のためのユーティリティと、有用そうなメソッドコンビネーション定義のライブラリです。

すっかり忘れていましたが、過去に紹介記事も書いていました。

このブログでもmc-expandのようなものを定義していましたが、method-combination-expandみたいなものも定義されています。
メソッドコンビネーションを活用するなら試してみて損はなさそうなユーティリティです。
しかし、LispWorksで動かない様子(PR出そうかな)

まとめ

案外使う人はカジュアルに使っている様子。
メソッドコンビネーションを学んで活用しましょう!


HTML generated by 3bmd in LispWorks 7.0.0

comments powered by Disqus