Тестирование нестандартного символа ascii в common lisp


Мне нужно проверить строку, чтобы увидеть, содержит ли она какие-либо символы, которые имеют коды выше 127 десятичных знаков (расширенные коды ASCII) или ниже 32. Есть ли какой-нибудь действительно хороший способ сделать это, или мне просто придется перебирать всю строку и сравнивать коды символов? Я использую общую реализацию lisp CCL.

1 3

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).

Однако я почти уверен, что вы не найдете более приятного решения, чем то, которое вы предложили в своем вопросе.