#:g1: cl-m4の紹介

Posted 2014-02-21 15:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の53日目です。

cl-m4とはなにか

 cl-m4は、m4のCommon Lisp実装です。

パッケージ情報

パッケージ名cl-m4
Quicklisp
CLiKihttp://cliki.net/cl-m4
Quickdocshttp://quickdocs.org/cl-m4

インストール方法

(ql:quickload :cl-m4)

試してみる

 どんな関数があるかは、Quickdocsで確認できます。といっても外部シンボルはprocess-m4のみですが。

 GNU M4互換を目指して一から作られたM4のCommon Lisp実装だそうですが、M4からASTを取得する方法がないのと、GNU M4でもマクロの評価/展開をフックする十分な手段が提供されていないことがCommon Lisp版開発の動機なのだそうです。
使い方はシンプルにprocess-m4に入出力のストリームを与えます。

(with-input-from-string (in "
  define(`ALPHA', `abcdefghijklmnopqrstuvwxyz')
  define(`ROT13', `nopqrstuvwxyzabcdefghijklm')

  translit(`abc ebg13', ALPHA, ROT13)  
")
  (with-output-to-string (out)
    (cl-m4:process-m4 in out)))
;=>  "
;      
;      
;    
;      nop rot13  
;    "

 わざわざm4をCommon Lisp上に実装するからには、全てをCommon Lisp上で実現する方向なのかと思いましたが、regexはlibcのものをcffi経由で利用するようです。
もしかしたら、そのうちregexもCommon Lisp実装になるのかもしれません。

まとめ

 今回は、cl-m4を紹介してみました。
defmacroからm4を呼び出してマクロを定義してみようかなと思いましたが、いまいち面白いものが作れず。
それはともかく世の中には色々なものがあるものです。

comments powered by Disqus