2015-10-28 3 views

ответ

3

Существует тип char, который представляет собой 8-битные символы, а также тип string, который определен как список символов. Существует также некоторый синтаксис и довольно настройки печати для символьных и строковых литералов:

typ string 
(* char list *) 

term "''foobar''" 
(* ''foobar'' :: char list *) 

value "hd ''foobar''" 
(* CHR ''f'' :: char *) 

Обратите внимание, что строковые литералы должны быть разграничены с двумя одинарными кавычками ''. Символьные литералы должны быть введены как CHR ''c''. В настоящее время это работает для большинства печатных символов ASCII, но ничего выше 0x7F.

Существуют функции nat_of_char и char_of_nat для преобразования между этими 8-битовыми символами и их ANSI-кодами (представлены как nat).

Существует также тип String.literal, который по существу является типом типа string, который скрывает основной список. Это в основном интересно для генерации кода, поскольку целевые языки (например, Scala) могут предоставлять выделенный тип строки (в отличие от всего списка символов). Конверсия между string и String.literal составляет implode и explode.

Обратите внимание, что если вы хотите экспортировать код с помощью строк, вы должны, вероятно, импортировать ~~/src/HOL/Library/Code_Char.thy, чтобы перевести символ характера Изабеллы в тип символа целевого языка. И даже тогда экспорт кода с использованием string приведет к коду с использованием списков символов; вам необходимо явно использовать String.literal в ваших уравнениях кода Изабель, чтобы получить правильный тип строки в SML, Scala и OCaml.

Есть некоторые мысли об обобщении характера характера Изабеллы для поддержки многобайтовых символов, но это все еще в будущем.

+0

Спасибо Мануэль! :-) – TFuto

 Смежные вопросы

  • Нет связанных вопросов^_^