Как я определяю, ли символ в диапазоне в Clojure?

Я пытаюсь записать функцию, которая проверяет, ли символ в определенном шестнадцатеричном диапазоне.

Я пробую код, показанный ниже:

(def current \s)
(and (>= current (char 0x20)) (<= current (char 0xD7FF)))

Я получаю следующую ошибку:

java.lang.ClassCastException: java.lang.Character cannot be cast to 
java.lang.Number (NO_SOURCE_FILE:0)

Я принимаю, потому что> = оператор ожидает число, он пытается ввести бросок это. В регулярном Java я мог просто сделать:

(current >= 0x20) && (current <= 0xD7FF)
7
задан Hassan Syed 12 February 2010 в 08:24
поделиться

2 ответа

сначала явно преобразовать его в int

(<= 0x20 (int current) 0xD7FF)
8
ответ дан 6 December 2019 в 23:05
поделиться

В Clojure символы не являются числами, хотя их легко преобразовать в символы с помощью функции int .

(number? \a)       => false
(number? 42)       => true
(number? (int \a)) => true

Для приведения типов к примитивным типам вы можете использовать функцию с именем нужного вам типа (см. (find-doc # "Coerce") ).

(int (char 0x20))
(float ...)
(map double [1 2 3 4])
 ....
3
ответ дан 6 December 2019 в 23:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: