#:g1: pythonic-string-readerの紹介

Posted 2014-04-07 15:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の98日目です。

pythonic-string-readerとはなにか

 pythonic-string-readerは、Yury Sulsky氏とZach Kost-Smith氏によるPythonの3重クォート的なものををCommon Lispに導入するライブラリです。

パッケージ情報

パッケージ名pythonic-string-reader
Quicklisp
Quickdocshttp://quickdocs.org/pythonic-string-reader

インストール方法

(ql:quickload :pythonic-string-reader)

試してみる

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

 pythonic-string-readerでは、named-readtablesでリードテーブルが定義されているので、それを使うのが簡単です。

"""foo"""
""" "foo" """
""" hello\ """
""" hello\ """" "
"""hello"""
"hello"
""" \ """
" \\ "
""" " " """
" \" \" "
"""" hello """"
"""" hello """ " """"
"\x86"
"""
foo
"""
"""
"bar"
"""

というような内容のfooというファイルがあった場合、pythonic-string-readerのリードテーブルを使えば、

(let ((*readtable* (*:find-readtable
                    'pythonic-string-reader:pythonic-string-syntax)))
 (with-open-file (in "foo")
   (loop :for xpr := (read in nil in) :until (eq xpr in)
         :do (print xpr))))
;>>  
;>>  "foo" 
;>>  " \"foo\" " 
;>>  " hello\\ " 
;>>  " hello\\ " 
;>>  " " 
;>>  "hello" 
;>>  "hello" 
;>>  " \\ " 
;>>  " \\ " 
;>>  " \" \" " 
;>>  " \" \" " 
;>>  " hello " 
;>>  " hello \"\"\" \" " 
;>>  "x86" 
;>>  "
;>>  foo
;>>  " 
;>>  "
;>>  \"bar\"
;>>  " 
;=>  NIL

のように読まれます。
簡単に言えば、ダブルクォートと、バックスラッシュをエスケープ文字なしに記述できる、というところです。Pythonのように\x22を'"'のように読んだりまではしない模様です。
また、named-readtablesを使いたくない人の為に、ENABLE-PYTHONIC-STRING-SYNTAX、DISABLE-PYTHONIC-STRING-SYNTAX関数も用意されています。

まとめ

 今回は、pythonic-string-readerを紹介してみました。
Common Lispの文字列では\n、\t等、C的な文字列の記法をサポートしていませんが、リーダーマクロでサポートしてしまうというのもアリといえばアリですね。

comments powered by Disqus