#:g1: YTools: Backquoteの紹介

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

(LISP Library 365参加エントリ)

 LISP Library 365 の365日目です。

YTools: Backquoteとはなにか

 YTools: Backquoteは、Drew McDermott氏のユーティリティであるYtoolsの中で定義されている独自のバッククォート式です。

パッケージ情報

パッケージ名YTools: Backquote
Quicklisp×
プロジェクトページHome page for Drew McDermott
CLiKiCLiki: YTools

インストール方法

 上記プロジェクトページからダウンロードしてきて適当に導入します。

試してみる

 Common Lispのバッククォートの問題点として、McDermott氏は、バッククォートは、quoteのように「'」→quoteという対応がなく、展開も処理系依存のためポータブルなコードウォーカーが書きにくく、また、カスタマイズもしづらいことを挙げています。
さらに展開の難解さも指摘していて、これらを解決しようというのが、今回紹介の独自のバッククォート式です。
記法は、「!`数字」と、「,数字」「,数字@」となっていて、既存のバッククォート式が使えなくなるということはないように配慮されています。
特長としては、対応する展開レベルを数字で指定できるのでネストした場合に、どのレベルに対応して展開されるのかが分かり易い点があります。

;;; 標準
(let ((x 'xx)
      (y 'yy))
  `(,x `(,',y)))
;=>  (XX `(,'YY))

;;; ytools (let ((x 'xx) (y 'yy)) !`1(,1x `(,1y))) ;=> (XX `(YY))

;;; 標準 (let ((x 'xx) (y 'yy)) `(,x `(,',y ,,y))) ;=> (XX `(,'YY ,YY))

;;; ytools (let ((x 'xx) (y 'yy)) !`1(,1x !`2(,1y ,2y))) ;=> (XX !`2(YY ,2#Y))

;;; ytools (let ((x 'xx) (y 'yy)) !`1(,1x !`2(,1y !`3(,2x ,y)))) ;=> (XX !`2(YY !`3(,2#X YY)))

3重のネスト位になるとYToolsの方が読み易い気はします。
書く時ですが、どのレベルの内容が欲しいのか数字で指定できるので複雑なネストを書くのはかなり楽ではあります。

まとめ

 今回は、YTools: Backquoteを紹介してみました。
ネストするバッククォート式を書くことは少ないですが、上手く状況に適合した場合には楽かもしれません。
しかし、バッククォート式を返す、バッククォート式がちょっと難しい気もしますね。これも馴れなのでしょうか。

comments powered by Disqus