CL-INTERPOL - String interpolation for Common Lisp
以前http://cadr.g.hatena.ne.jp/g000001/20080318/1205851335でちょっとふれてあった CL-INTERPOL 便利だ。
頭に #? は付けなければならないけど、正規表現中のバックスラッシュを重ねる手間がはぶけるし、変数や式の埋め込みもできる。
これが常に有効でもいいんじゃないだろうか。
(require :cl-interpol) (require :cl-ppcre) (cl-interpol:enable-interpol-syntax) (cl-ppcre:do-register-groups (m) (#?/(\d+)/ "aa12ab34") (princ #?"match is [${m}]\n")) ;; match is [12] ;; match is [34] (princ #?"(+ 1 2) => ${(+ 1 2)}\n") ;; (+ 1 2) => 3
Parenscript で jQuery を使って書こうと思ったけど、あのメソッドチェーンがエレガントに書けなかった。
CL-INTERPOL を使って、変数を埋め込みながら、素直に文字列で書くのがいい気がする。
cl-interpol:*outer-delimiters* にクォートキャラクタが入っているので、これに追加すれば任意の文字をクォート文字として使える。「」を使ってみる。
それに改行が途中にあっても大丈夫。
(pushnew '(#\「 . #\」) cl-interpol:*outer-delimiters* :test 'equal) (princ #?「'a', "a" \\b\\」) ;; 'a', ;; "a" \b\