#:g1: scribbleの紹介

Posted 2014-10-17 10:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の290日目です。

scribbleとはなにか

 scribbleは、Fare Rideau氏作のCommon LispでScribble記法を利用できるようにするライブラリです。

パッケージ情報

パッケージ名scribble
Quicklisp
CLiKiCLiki: Scribble
Quickdocsscribble | Quickdocs
CL Test Grid: ビルド状況scribble | CL Test Grid

インストール方法

(ql:quickload :scribble)

試してみる

 どんな関数があるかは、Quickdocsで確認できます。

 Racket(PLT Scheme)方面では、Eli Barzilay氏考案のScribbleという記法が良く使われるようです。
Scheme処理系に付属のマニュアル等でたまに使われているのを見掛けることもありますね。

@{文章はどういう風に書くんでしょうか}

@code{(defun hello (x) (princ "Hello, ") (princ x) (terpri))}

@code{(hello "foo bar baz")}

@example{(+ 1 2) -> @(+ 1 2)⏎}

@foo|--{bar}@|{baz}--|

こんな感じに書いたものが、

(let ((p "/tmp/foo.txt")
      (eof '#:eof)
      (*readtable* (copy-readtable nil)))
  (scribble:enable-scribble-at-syntax)
  (with-open-file (s p :direction :input :if-does-not-exist :error)
    (loop for i = (read s nil eof nil)
          until (eq i eof)
          collect i)))
;=>  (("文章はどういう風に書くんでしょうか")
;     (CODE "(defun hello (x)" "
;    "
;      "(princ \"Hello, \")" "
;    "
;      "(princ x)" "
;    "
;      "(terpri))")
;     (CODE "(hello \"foo bar baz\")") (EXAMPLE "(+ 1 2) -> " (+ 1 2) "⏎")
;     (FOO "bar}@|{baz"))

こんな感じに読まれます。

まとめ

 今回は、scribbleを紹介してみました。
コード例を沢山記述しつつホスト言語の機能を活用したい場合などには便利そうな記法ですね。

comments powered by Disqus