string=の意外な利点
今まで、string=を使わずにequalで済ませていた。性能が要求される場面ではstring=の方が良いと思うけど(equalは汎用の比較関数なので、処理の振り分けの分だけどうしても遅くなる。ただ、型宣言をすれば、処理系によってはstring=と同じ処理に最適化されるかもしれない)、そんなコードなんて全然書かない。なので、すっかり存在を忘れていた今日この頃。Ron Garretのユーティリティを読んでいたら、自分にとっては意外な利点を発見した。string=は文字列とシンボルの比較に便利。
ユーティリティの中にある、
(defun ignorevar? (v)
(and (symbolp v) (string= v "_")))
というコードを読んで気付いたんだけど、string=に直接シンボルを渡している。あれ? と思ってHyperSpecを引いたら、渡すのはstring designatorで良いらしい。string designatorっていうのは、文字とシンボルと文字列のこと。
以前書いたマクロの中で、
(defun <-p (x)
(equal (symbol-name x) "<-"))
っていうコードがあったんだけど、string=を使えば、
(defun <-p (x)
(string= x "<-"))
こう、ちょっとだけ短く書けて、ちょっとだけ嬉しい。大きな違いはないんだけど、ささやかな幸せ、というか。
何にせよ、勉強になった。
0 件のコメント:
コメントを投稿