String 检查字符串是否仅为字母(无符号和数字)lisp

String 检查字符串是否仅为字母(无符号和数字)lisp,string,lisp,String,Lisp,我需要检查一个单词是否和字母连在一起 示例“hfjel”返回true “df(f0)”返回false 任何人都可以告诉我函数符号的名称 感谢您的帮助有一个名为的方便的标准函数,可以满足您的要求 CL-USER(1): (alpha-char-p #\a) T CL-USER(2): (alpha-char-p #\Γ) T CL-USER(3): (alpha-char-p #\α) T CL-USER(4): (alpha-char-p #\0) NIL CL-USER(5): (alpha-

我需要检查一个单词是否和字母连在一起 示例“hfjel”返回true “df(f0)”返回false

任何人都可以告诉我函数符号的名称
感谢您的帮助

有一个名为的方便的标准函数,可以满足您的要求

CL-USER(1): (alpha-char-p #\a)
T
CL-USER(2): (alpha-char-p #\Γ)
T
CL-USER(3): (alpha-char-p #\α)
T
CL-USER(4): (alpha-char-p #\0)
NIL
CL-USER(5): (alpha-char-p #\.)
NIL
您可以将其与以下内容结合使用:


有一个方便的标准函数名为,它可以满足您的要求

CL-USER(1): (alpha-char-p #\a)
T
CL-USER(2): (alpha-char-p #\Γ)
T
CL-USER(3): (alpha-char-p #\α)
T
CL-USER(4): (alpha-char-p #\0)
NIL
CL-USER(5): (alpha-char-p #\.)
NIL
您可以将其与以下内容结合使用:


好的,我在上面对变音符号进行了评论,因为这种特殊情况经常被忽略,下面是一个例子:

* (defparameter *weird-letter*
        (coerce (list (code-char #x0438)
                  (code-char #x0306)) 'string))
*WEIRD-LETTER*

* *weird-letter*
"и"

* (length *weird-letter*)
2

* (every #'alpha-char-p *weird-letter*)
NIL
实际上,我不确定不同的Lisp实现在这里会做什么,因为其中一些实现中的Unicode支持是不同的(到目前为止我可以说)

对于上面的代码,预期结果一定是
T
,因为事实上,两个代码点U+0438-U+0306构成一个带变音符号的字母。Unicode有两种拼写方法,一种是单个字符,另一种是不带变音符号和变音符号的同一字母的组合

所以,如果你想超级正确,那么你必须检查字母后面是否有变音符号,但是(你瞧!)只有其中一些是真正有效的字母!Unicode是一项严肃的业务

编辑:

为了更好地说明我的情况:

#!/opt/ActivePerl-5.14/bin/perl

binmode STDOUT, ":utf8";

my $weird_letter = "\x{0438}\x{0306}";
print "$weird_letter\n";

if ($weird_letter =~ m/^(\pL|(\pL\pM))+$/)
     { print "it is a letter!\n"; }
else { print "it is not a letter!\n"; }

上面的内容几乎可以公平地处理这类字符。

好的,我在上面对变音符号进行了评论,因为这种特殊情况经常被忽略,下面是一个例子:

* (defparameter *weird-letter*
        (coerce (list (code-char #x0438)
                  (code-char #x0306)) 'string))
*WEIRD-LETTER*

* *weird-letter*
"и"

* (length *weird-letter*)
2

* (every #'alpha-char-p *weird-letter*)
NIL
实际上,我不确定不同的Lisp实现在这里会做什么,因为其中一些实现中的Unicode支持是不同的(到目前为止我可以说)

对于上面的代码,预期结果一定是
T
,因为事实上,两个代码点U+0438-U+0306构成一个带变音符号的字母。Unicode有两种拼写方法,一种是单个字符,另一种是不带变音符号和变音符号的同一字母的组合

所以,如果你想超级正确,那么你必须检查字母后面是否有变音符号,但是(你瞧!)只有其中一些是真正有效的字母!Unicode是一项严肃的业务

编辑:

为了更好地说明我的情况:

#!/opt/ActivePerl-5.14/bin/perl

binmode STDOUT, ":utf8";

my $weird_letter = "\x{0438}\x{0306}";
print "$weird_letter\n";

if ($weird_letter =~ m/^(\pL|(\pL\pM))+$/)
     { print "it is a letter!\n"; }
else { print "it is not a letter!\n"; }

上述内容几乎可以公平地处理此类字符。

我建议将此问题分成两部分。
symbol name
与您似乎要调用的符号几乎无关。我建议将此问题分成两部分。
symbol name
与您似乎要调用的符号几乎无关。是的,每个a一个合适的测试函数(比如,ALPHA-CHAR-P)是我的直接想法。是的,每一个合适的测试函数(比如,ALPHA-CHAR-P)都是我的直接想法。