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

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

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

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

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

языкимя типапример литерала (ов)
ANSI Common Lispсимвол, ключевое словосимвол, :ключевое слово
Clojureсимвол,[2] ключевое слово[3]'символ, :ключевое слово
Эликсиратом, символ: sym
Erlangатомсим или же 'сим'
ЮляСимвол: sym
Цель-CSEL@selector (симв.)
PICAXE БАЗОВЫЙсимвол символ let name = переменная
Прологатом, символсим или же 'сим'
РубинСимвол: sym или же : 'сим'
Scalascala.Symbol'символ
Схемасимволсим
БолтовняСимвол#sym или же # 'sym'
SML / NJАтом.атом
JavaScript (ES6 и новее)СимволСимвол («симв»);
Язык Wolfram LanguageСимволСимвол ["сим"] или же сим
K (язык программирования)символ`сим

Лисп

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

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

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

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

Примеры

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

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

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

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

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

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

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

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

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

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

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

#: unterned-symbol

Пролог

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

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

Примеры

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

отец(Зевс, Гермес).отец(Зевс, Персей).брат или сестра(Икс, Y) :- отец(Z, Икс), отец(Z, Y).

Рубин

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

Примеры

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

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

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

irb (основной): 001: 0>my_symbol = "Привет, мир!".стажер =>: "Привет, мир!"irb (основной): 002: 0>my_symbol = "Привет, мир!".to_sym =>: "Привет, мир!"irb (основной): 003: 0>my_string = :Привет.to_s=> "привет"

Символы являются объектами Символ класс в Ruby:[11]

irb (основной): 004: 0>my_symbol = :Привет, мир=>: hello_worldirb (основной): 005: 0>my_symbol.длина => 11irb (основной): 006: 0>my_symbol.учебный класс => Символ

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

irb (основной): 007: 0>"aoboc".расколоть("о")=> ["а", "б", "в"]irb (основной): 008: 0>"aoboc".Отправить(:расколоть, "о") # такой же результат=> ["а", "б", "в"]

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

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

Болтовня

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

Примеры

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

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

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

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

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

my_symbol := #Привет, мирmy_symbol учебный класс            "=> Символ"

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

"так же, как 'foo' в: 2"'фу' выполнять: #в: с: 2 "=> $ o"

Рекомендации

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