#:g1: CLOCC/cllib: elispの紹介

Posted 2014-09-29 15:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の273日目です。

CLOCC/cllib: elispとはなにか

 CLOCC/cllib: elispは、Sam Steingold氏作のCommon LispでEmacs Lispのコードを利用するためのライブラリです。

パッケージ情報

パッケージ名CLOCC/cllib: elisp
プロジェクトサイト CLOCC - Common Lisp Open Code Collection / Hg / [5dc26c] /src/cllib/elisp.lisp

インストール方法

 CLOCCのプロジェクトサイトからダウンロードしてきて適当に導入します。

$ hg clone http://hg.code.sf.net/p/clocc/hg clocc-hg

で全体のソースも取得できます。
cllib/elisp が目的のソースです。

試してみる

 cllibの中にあるということで、cloccというよりは、cllibの一部かなと思います。
定義されているのは、こんな感じですが、

良く使いそうなところは定義されている感じはします。

 Emacs Lisp用のリードテーブルも定義してあります。

(*:register-readtable :el cllib::+elisp-readtable+)

(with-input-from-string (in "[1 2 3 4] ?a ?b ?c \"foo\\nbar\\nbaz\\n\" ") (let ((*readtable* (*:find-readtable :el)) xpr) (el::while (not (eq in (setq xpr (read in nil in)))) (print xpr)))) ;>> ;>> #(1 2 3 4) ;>> #\a ;>> #\b ;>> #\c ;>> "foo ;>> bar ;>> baz ;>> " ;=> NIL

 元々はEmacs Lispのファイルをロードしたりコンパイルしたりすることが目的のようなのでリードテーブルが定義されているのも当然といえば当然かもしれません。
これ位のファイルなら

(defun foo (n)
  n)

(defun bar (n) (message (format "hello %s" n)))

こんな感じでファイルをコンパイルして実行できます。

(el::compile-file "/tmp/foo.el")
(el::load "/tmp/foo")

(el::foo 8) ;=> 8 (el::bar "foo") ;>> hello %s ;=> NIL

コメントでは、emacsのcalendarをコンパイルしているようですが、現在はそのままではコンパイルできないようです。結構前のemacsかもしれません。

まとめ

 今回は、CLOCC/cllib: elispを紹介してみました。
Emacs Lispのコードがロードできると便利なこともありそうですね。

comments powered by Disqus