stringtranslate.com

Символ (программирование)

Символ в программировании — это примитивный тип данных , экземпляры которого имеют удобочитаемую форму. Символы могут использоваться в качестве идентификаторов . В некоторых языках программирования они называются атомами . [1] Уникальность обеспечивается путем хранения их в таблице символов . Наиболее распространенным использованием символов программистами является выполнение языкового отражения (особенно для обратных вызовов ), а наиболее распространенным косвенным способом является их использование для создания объектных связей .

В самой тривиальной реализации они по сути являются именованными целыми числами ; например, перечислимый тип в языке C.

Поддерживать

Следующие языки программирования обеспечивают поддержку выполнения символов:

Джулия

Символы в Julia — это интернированные строки, используемые для представления идентификаторов в проанализированном коде Julia ( AST ), а также в качестве имен или меток для идентификации сущностей (например, ключей в словаре). [5]

Лисп

Символ в Lisp уникален в пространстве имен (или пакете в Common Lisp ). Символы можно проверить на равенство с помощью функции EQ. Программы на Lisp могут генерировать новые символы во время выполнения. Когда Lisp считывает данные, содержащие текстовые представленные символы, существующие символы ссылаются. Если символ неизвестен, считыватель Lisp создает новый символ.

В Common Lisp символы имеют следующие атрибуты: имя, значение, функцию, список свойств и пакет. [6]

В Common Lisp также возможно, что символ не интернирован в пакет. Такие символы могут быть напечатаны, но при обратном чтении необходимо создать новый символ. Поскольку он не интернирован , исходный символ не может быть извлечен из пакета.

В Common Lisp символы могут использовать любые символы, включая пробелы, такие как пробелы и переводы строк. Если символ содержит пробел, его нужно записать как |это символ|. Символы могут использоваться в качестве идентификаторов для любых видов именованных программных конструкций: переменных, функций, макросов, классов, типов, тегов goto и т. д. Символы могут быть интернированы в пакет. [7] Символы ключевых слов являются самооцениваемыми, [8] и интернированы в пакете с именем KEYWORD.

Примеры

Ниже приведено простое внешнее представление символа Common Lisp :

это-символ

Символы могут содержать пробелы (и все другие символы):

|Это символ с пробелом|

В Common Lisp символы, в печатном представлении которых имеется двоеточие, являются ключевыми символами . Они интернированы в пакете ключевых слов.

:ключевое слово-символ

Печатное представление символа может включать имя пакета. Между именем пакета и именем символа пишутся два двоеточия.

имя-пакета::имя-символа

Пакеты могут экспортировать символы. Тогда между именем пакета и именем символа пишется только одно двоеточие.

пакет:экспортированный-символ

Символы, которые не интернированы в пакет, также могут быть созданы и иметь обозначение:

#:uninterned-символ

Постскриптум

В PostScript ссылки на объекты имен могут быть либо литеральными , либо исполняемыми , что влияет на поведение интерпретатора при их обнаружении. Операторы cvxи cvlмогут использоваться для преобразования между двумя формами. Когда имена создаются из строк с помощью cvnоператора, набор разрешенных символов не ограничен.

Пролог

В Прологе символы (или атомы) являются основными примитивными типами данных, похожими на числа. [9] Точная нотация может отличаться в разных диалектах Пролога. Однако она всегда довольно проста (никаких кавычек или специальных начальных символов не требуется).

В отличие от многих других языков, символам можно придать значение , создав некоторые факты и/или правила Пролога.

Примеры

Следующий пример демонстрирует два факта (описывающих, что такое отец ) и одно правило (описывающее значение слова sibling ). Эти три предложения используют символы (отец, zeus, hermes, perseus и sibling) и некоторые абстрактные переменные (X, Y и Z). Материнское отношение опущено для ясности.

отец ( зевс ,  гермес ). отец ( зевс ,  персей ).брат или сестра ( X ,  Y )  :-  отец ( Z ,  X ),  отец ( Z ,  Y ).

Рубин

В Ruby символы могут быть созданы с помощью литеральной формы или путем преобразования строки. [1] Их можно использовать в качестве идентификатора или интернированной строки. [10] Два символа с одинаковым содержимым всегда будут ссылаться на один и тот же объект. [11] Считается наилучшей практикой использовать символы в качестве ключей к ассоциативному массиву в Ruby. [10] [12]

Примеры

Ниже приведен простой пример символьного литерала в Ruby: [1]

my_symbol = :a my_symbol = :"идентификатор"    

Строки можно преобразовать в символы и наоборот:

irb(main):001:0> my_symbol = "Привет, мир!" . intern => :"Привет, мир!" irb(main):002:0> my_symbol = "Привет, мир!" . to_sym => :"Привет, мир!" irb(main):003:0> my_string = :hello . to_s => "hello"        

Символы — это объекты класса Symbolв Ruby: [13]

irb(main):004:0> my_symbol = :hello_world => :hello_world irb(main):005:0> my_symbol . длина => 11 irb(main):006:0> my_symbol . класс => Символ    

Символы обычно используются для динамической отправки сообщений (вызова методов) объектам:

irb(main):007:0> "aoboc" . split ( "o" ) => ["a", "b", "c"] irb(main):008:0> "aoboc" . send ( :split , "o" ) # тот же результат => ["a", "b", "c"]  

Символы как ключи ассоциативного массива:

irb(main):009:0> my_hash = { a : "яблоко" , b : "банан" } => {:a=>"яблоко", :b=>"банан"} irb(main):010:0> my_hash [ :a ] => "яблоко" irb(main):011:0> my_hash [ :b ] => "банан"         

Smalltalk

В Smalltalk символы могут быть созданы с помощью литеральной формы или путем преобразования строки. Они могут использоваться как идентификатор или интернированная строка. Два символа с одинаковым содержимым всегда будут ссылаться на один и тот же объект. [14] В большинстве реализаций Smalltalk селекторы (имена методов) реализованы как символы.

Примеры

Ниже приведен простой пример символьного литерала в Smalltalk:

my_symbol  :=  # 'идентификатор'  " Символьный литерал " my_symbol  :=  #a  " Технически это селекторный литерал. В большинстве реализаций  селекторы являются символами, поэтому это также символьный литерал "

Строки можно преобразовать в символы и наоборот:

my_symbol  :=  'Привет, мир!'  asSymbol  " => #'Привет, мир!' " my_string  :=  #hello:  asString  " => 'hello:' "

Символы соответствуют протоколу symbol, и их класс вызывается Symbolв большинстве реализаций:

my_symbol  :=  #hello_world my_symbol  класс  " => Символ "

Символы обычно используются для динамической отправки сообщений (вызова методов) объектам:

" то же, что и 'foo' в: 2 " 'foo'  выполнить:  #в:  с:  2  " => $o "

Ссылки

  1. ^ abc Томас, Дэйв ; Фаулер, Чад; Хант, Энди (2001). Программирование на Ruby: руководство для прагматичных программистов; [включает Ruby 1.8] (2-е, 10-е издание). Роли, Северная Каролина: The Pragmatic Bookshelf. ISBN 978-0-9745140-5-5.
  2. ^ Символы на странице «Структуры данных»
  3. ^ Ключевые слова на странице «Структуры данных»
  4. ^ "Экскурсия по языку Dart | Символы". Язык программирования Dart . Получено 17 января 2021 г.
  5. ^ "Julia Core.Symbol". Документация Julia . Получено 31 мая 2022 г.
  6. ^ "CLHS: Системный класс SYMBOL". www.lispworks.com .
  7. ^ "CLHS: ПАКЕТ Системных Классов". www.lispworks.com .
  8. ^ Питер Норвиг : Парадигмы программирования искусственного интеллекта: примеры в Common Lisp , Морган Кауфманн, 1991, ISBN 1-55860-191-0 , Интернет 
  9. ^ Братко, Иван (2001). Программирование на Прологе для искусственного интеллекта . Харлоу, Англия; Нью-Йорк: Addison Wesley. ISBN 978-0-201-40375-6.
  10. ^ ab Kidd, Eric (20 января 2007 г.). "13 способов взглянуть на символ Ruby". Случайные хаки . Получено 10 июля 2011 г.
  11. ^ «Программирование на Ruby: Руководство прагматичного программиста». ruby-doc.com .
  12. ^ «Использование символов по неправильной причине». Гномические заметки .
  13. ^ "Symbol". Документация Ruby . Получено 10 июля 2011 г.
  14. ^ http://wiki.squeak.org/squeak/uploads/172/standard_v1_9-indexed.pdf Стандарт ANSI Smalltalk.