Символ (программирование) - Symbol (programming)
А символ в компьютерное программирование это примитивный тип данных чей экземпляры имеют уникальную, удобочитаемую форму. Символы могут использоваться как идентификаторы. В некоторых языки программирования, они называются атомы.[1] Уникальность обеспечивается удержанием их в таблица символов. Чаще всего программисты используют символы для выполнения языка. отражение (особенно для обратные вызовы ), и наиболее распространенным косвенным образом является их использование для создания объекта связи.
В самом банальном выполнение, по сути, они названы целые числа (например, перечислимый тип в C).
Поддерживать
Следующее языки программирования предоставлять время выполнения поддержка символов:
язык | имя типа | пример литерала (ов) |
---|---|---|
ANSI Common Lisp | символ, ключевое слово | символ, :ключевое слово |
Clojure | символ,[2] ключевое слово[3] | 'символ, :ключевое слово |
Эликсир | атом, символ | : sym |
Erlang | атом | сим или же 'сим' |
Юля | Символ | : sym |
Цель-C | SEL | @selector (симв.) |
PICAXE БАЗОВЫЙ | символ | символ let name = переменная |
Пролог | атом, символ | сим или же 'сим' |
Рубин | Символ | : sym или же : 'сим' |
Scala | scala.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"
Рекомендации
- ^ а б c Хант, Дэйв Томас; Чад Фаулер; Энди (2001). Programming Ruby - руководство прагматичного программиста; [включает Ruby 1.8] (2. изд., 10. печат. Изд.). Роли, Северная Каролина: Прагматическая книжная полка. ISBN 978-0-9745140-5-5.
- ^ Символы на странице структур данных
- ^ Ключевые слова на странице структур данных
- ^ Common Lisp HyperSpec, системный класс Symbol
- ^ Common Lisp HyperSpec, пакет системного класса
- ^ Питер Норвиг: Парадигмы программирования с использованием искусственного интеллекта: примеры использования Common Lisp, Морган Кауфманн, 1991, ISBN 1-55860-191-0, Интернет
- ^ Братко, Иван (2001). Пролог для искусственного интеллекта. Харлоу, Англия; Нью-Йорк: Эддисон Уэсли. ISBN 978-0-201-40375-6.
- ^ а б Кидд, Эрик. «13 способов взглянуть на рубиновый символ». Случайные взломы. Получено 10 июля 2011.
- ^ "Программирование на Ruby: Руководство программиста-прагматика".
- ^ «Использование символов по неправильной причине». Гномические заметки.
- ^ "Символ". Документация по Ruby. Получено 10 июля 2011.
- ^ http://wiki.squeak.org/squeak/uploads/172/standard_v1_9-indexed.pdf Стандарт ANSI Smalltalk.