Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

Поддержка [ править ]

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

Лисп [ править ]

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

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

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

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

Примеры [ править ]

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

это-это-символ

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

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

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

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

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

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

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

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

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

#: unterned-symbol

Пролог [ править ]

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

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

Примеры [ править ]

В следующем примере демонстрируются два факта (описывающие, что такое отец ) и одно правило (описывающее значение слова « брат или сестра» ). В этих трех предложениях используются символы (отец, зевс, гермес, персей и брат) и некоторые абстрактные переменные (X, Y и Z). Мать отношения были опущены для ясности.

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

Руби [ править ]

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

Примеры [ править ]

Ниже приводится простой пример символьного литерала в 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  =  : привет . to_s => "привет"

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

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

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

irb (основной): 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 :  "apple" ,  b :  "banana"  } => {: a => "apple" ,: b => "banana"} irb (main): 010: 0> my_hash [ : a ]  => "яблоко" irb (основной): 011: 0> my_hash [ : b ]  => "банан"

Smalltalk [ править ]

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

Примеры [ править ]

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

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

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

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

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

my_symbol  : =  #hello_world my_symbol  class  "=> Symbol"

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

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

Ссылки [ править ]

  1. ^ a b c Хант, Дэйв Томас; Чад Фаулер; Энди (2001). Programming Ruby - руководство прагматичного программиста; [включает Ruby 1.8] (2-е изд., 10-е изд.). Роли, Северная Каролина: Прагматическая книжная полка. ISBN 978-0-9745140-5-5.
  2. ^ Символы на странице структур данных
  3. ^ Ключевые слова на странице о структурах данных
  4. ^ «Экскурсия по языку Дарт | Символы» . Язык программирования Дарт . Проверено 17 января 2021 года .
  5. ^ Common Lisp HyperSpec, системный класс Symbol
  6. ^ Common Lisp HyperSpec, пакет системного класса
  7. ^ Питер Норвиг : Парадигмы программирования искусственного интеллекта: тематические исследования в Common Lisp , Морган Кауфманн, 1991, ISBN 1-55860-191-0 , Интернет 
  8. ^ Братко, Иван (2001). Программирование на прологе для искусственного интеллекта . Харлоу, Англия; Нью-Йорк: Эддисон Уэсли. ISBN 978-0-201-40375-6.
  9. ^ а б Кидд, Эрик. «13 способов взглянуть на рубиновый символ» . Случайные взломы . Проверено 10 июля 2011 года .
  10. ^ "Программирование Ruby: Руководство программиста-прагматика" .
  11. ^ «Использование символов по неправильной причине» . Гномические заметки .
  12. ^ «Символ» . Документация по Ruby . Проверено 10 июля 2011 года .
  13. ^ http://wiki.squeak.org/squeak/uploads/172/standard_v1_9-indexed.pdf Стандарт ANSI Smalltalk.