本帖最后由 作者 于 2004-6-28 3:38:01 编辑
aeo000000发表于2004-6-27 18:23:00(distof \"3e... 1.(distof "3ef")-->nil,并不是一个错误。它只是表示没有一个实数想对应而已. 》有点咬文嚼字了,“如果distof成功执行, 那么它将返回一实型数值。否则, 它将返回 nil。”(distof "3ef")就不能理解为执行(转换)"3ef"出错么?当然你的理解没错,应该说更确切。2。楼主问的是“有什么办法去判断一个字符串内的东西是字母还是数字”,而不是“有什么办法去判断一个字符串内的东西是否包含数字”"23e3" 字符对应的是有效数字,"34,34,34" 是数?当然不是,而是包含数字的字符串(not (wcmatch string "*@*)) --->没字母(not (wcmatch "34,34,34" "*@*")) -> T ;;这是个什么数?(not (wcmatch "23e3" "*@*")) -> nil_$ (not (wcmatch "-23.-3" "*@*"))
T
_$ (not (wcmatch "-2*3./1*3" "*@*"))
T这样的测试结果,能让人满意么?有字母未必就不是数(1e3),没有字母未必就是数(12*-34)3。话说回来,再仔细分析,“有什么办法去判断一个字符串内的东西是字母还是数字”,字母长度肯定是1个,如"A",数字也是一个的,如"3" 。数长度可多个,“12.3".而“ab”既不是字母,也不是数字,而是字符串。因此:- (setq strlst '("a" "ab" "ab12" "12.3" "12./3" "1e2" "34,34" "3"))
- (mapcar '(lambda(x)
- (cond
- ((wcmatch x "@") (strcat x "是字母"))
- ((wcmatch x "#") (strcat x "是数字"))
- ((distof x) (strcat x "是数"))
- (T (strcat x "是字符串"))
- )
- ) strlst)
- -> ("a是字母" "ab是字符串" "ab12是字符串" "12.3是数" "12./3是字符串" "1e2是数" "34,34是字符串" "3是数字")
|