はじめに
Common Lispなら丸括弧も関数名として利用できるんじゃないかと思って調べました。\
あるいは|
でエスケープすれば可能です。
試す
roswellをインストールして試してみた。
parenthesis.lisp
$ros run
* (defun \(1\) () 1)
|(1)|
* (\(1\))
1
* (defun |(2)| () 2)
|(2)|
* (|(2)|)
2
* (\(2\))
2
* (|(1)|)
1
* (defun \(a () 'a)
|(A|
* (defun |(b| () 'b)
|(b|
* (\(a)
A
* (|(b|)
B
(defun \(a () 'a)
では大文字が印字されて、(defun |(b| () 'b)
では小文字が印字されるのか、分からないです。
リーダーマクロ
エスケープに利用した、\
や|
はリーダーマクロとして定義してあるようでした。解説はHyperSpecに任せます。
おわりに
エスケープせずに(
を使う方法はあるんだろうか。