読者です 読者をやめる 読者になる 読者になる

alpha-char-pの挙動

common lisp sbcl

alpha-char-p関数が自分の予想外の挙動をするのを発見。(確認したのは、sbclclisp)

;; 予想通り
> (alpha-char-p #\a)
--> T

;; これも
> (alpha-char-p #\0)
--> NIL

;; 予想外
> (alpha-char-p #\あ)
--> T

別に「アルファベット」が、aからzまでの文字だけを指すわけではないので、上の挙動は適切なのだろうが、何となくこういう関数はa〜z,A〜Zの文字にだけtrueを返す印象があった(Cのisalphaとかの影響か?)。


Common LISP 第2版』には、alpha-char-pの説明として「標準文字(standard-char-pによって定義されるもの)に対しては文字AからZまでとaからzまでがアルファベットである」(p.331)と書かれているので、(and (standard-char-p char) (alpha-char-p char))などのようにすれば、自分が考えていた通りの結果を返してくれそうだ。


それにしても、sbclでは、alpha-char-p関数のドキュメントとして以下のような文字列が返ってくるので紛らわしい。
このため、初めはこの挙動がバグかと思ってしまった。

> (documentation 'alpha-char-p 'function)
--> "The argument must be a character object. ALPHA-CHAR-P returns T if the
     argument is an alphabetic character, A-Z or a-z; otherwise NIL."