Тестирование нестандартного символа ascii в common lisp
Мне нужно проверить строку, чтобы увидеть, содержит ли она какие-либо символы, которые имеют коды выше 127 десятичных знаков (расширенные коды ASCII) или ниже 32. Есть ли какой-нибудь действительно хороший способ сделать это, или мне просто придется перебирать всю строку и сравнивать коды символов? Я использую общую реализацию lisp CCL.
1 ответ:
Переносной способ, как вы сами предположили,
(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).
Однако я почти уверен, что вы не найдете более приятного решения, чем то, которое вы предложили в своем вопросе.