在常见的lisp中测试非标准ascii字符

时间:2013-04-29 20:05:48

标签: string common-lisp ccl

我需要测试一个字符串,看它是否包含任何代码高于十进制127(扩展的ASCII代码)或低于32的字符。有没有真正好的方法可以做到这一点,或者我只需要遍历整个字符串并比较字符的字符代码?我正在使用常见的lisp实现CCL。

1 个答案:

答案 0 :(得分:7)

正如您自己建议的那样,便携式方式

(defun string-standard-p (string &key (min 32) (max 127))
  (every (lambda (c) (<= min (char-code c) max)) string))

可能存在特定于实现的方式,例如,在CLISP中,您可以执行

(defun string-encodable-p (string encoding)
  (every (lambda (c) (typep c encoding)) string))
(string-encodable-p "foo" charset:ascii)
==> T

虽然它实际上会接受所有 ASCII字符,而不仅仅是32:127。

(对不起,我不熟悉CCL)。

但是,我很确定您找不到更好解决方案,而不是您在问题中建议的解决方案。