String 检查字符串是否仅为字母(无符号和数字)lisp
我需要检查一个单词是否和字母连在一起 示例“hfjel”返回true “df(f0)”返回false 任何人都可以告诉我函数符号的名称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-
感谢您的帮助有一个名为的方便的标准函数,可以满足您的要求
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)都是我的直接想法。