Символ (программирование)
Эта статья фокусируется только на одном специализированном аспекте предмета . ( октябрь 2023 г. ) |
Символ которого в компьютерном программировании — это примитивный тип данных , экземпляры имеют удобочитаемую форму. можно использовать символы В качестве идентификаторов . В некоторых языках программирования их называют атомами . [1] Уникальность обеспечивается за счет хранения их в таблице символов . Наиболее распространенное использование символов программистами — это отражение языка (особенно для обратных вызовов ), а наиболее распространенным косвенным образом — их использование для создания связей объектов .
В самой тривиальной реализации они называются целыми числами ; например, перечислимый тип на C. языке
Поддерживать
[ редактировать ]Следующие языки программирования обеспечивают во время выполнения поддержку символов :
язык | введите имя(я) | пример литерала(ов) |
---|---|---|
ANSI Общий Лисп | символ, ключевое слово | symbol , :keyword
|
Кложур | символ, [2] ключевое слово [3] | 'symbol , :keyword
|
Дарт | Символ [4] | #sym
|
Эликсир | атом, символ | :sym
|
Эрланг | атом | sym или 'sym'
|
JavaScript (ES6 и новее) | Символ | Symbol("sym");
|
Юлия | Символ | :sym
|
К | символ | `сим |
Цель-C | КЛЕТКА | @selector(sym)
|
ПИКАКС БАЗОВЫЙ | символ | symbol let name = variable
|
Постскриптум | имя | /sym или sym
|
Пролог | атом, символ | sym или 'sym'
|
Руби | Символ | :sym или :'sym'
|
Скала | скала.Символ | 'symbol
|
Схема | символ | sym
|
Смолток | Символ | #sym или #'sym'
|
СМЛ/Нью-Джерси | атом.атом | |
Вольфрам Язык | Символ | Symbol["sym"] или sym
|
Юлия
[ редактировать ]Символы в Julia — это интернированные строки, используемые для представления идентификаторов в анализируемом коде Julia ( AST ), а также в качестве имен или меток для идентификации сущностей (например, как ключи в словаре). [5]
Лисп
[ редактировать ]Символ в Lisp уникален в пространстве имен (или пакете в Common Lisp ). Символы можно проверить на равенство с помощью функции EQ. Программы на Lisp могут генерировать новые символы во время выполнения. Когда Лисп считывает данные, содержащие символы, представленные в текстовом виде, ссылаются на существующие символы. Если символ неизвестен, программа чтения Lisp создает новый символ.
В Common Lisp символы имеют следующие атрибуты: имя, значение, функцию, список свойств и пакет. [6]
В Common Lisp также возможно, что символ не встроен в пакет. Такие символы можно распечатать, но при обратном чтении необходимо создать новый символ. Поскольку он не интернирован , исходный символ не может быть извлечен из пакета.
В символах Common Lisp могут использоваться любые символы, включая пробелы, например пробелы и символы новой строки. Если символ содержит пробел, его необходимо записать как |это символ|. Символы можно использовать в качестве идентификаторов для любых именованных программных конструкций: переменных, функций, макросов, классов, типов, тегов перехода и т. д. Символы могут быть интернированы в пакет. [7] Символы ключевых слов самооцениваются. [8] и помещен в пакет с именем KEYWORD.
Примеры
[ редактировать ]Ниже приведено простое внешнее представление символа Common Lisp :
this-is-a-symbol
Символы могут содержать пробелы (и все остальные символы):
|This is a symbol with whitespace|
В Common Lisp символы с двоеточием в начале в их печатном представлении являются символами ключевых слов . Они интернированы в пакет ключевых слов.
:keyword-symbol
Печатное представление символа может включать имя пакета. Между названием пакета и названием символа пишутся два двоеточия.
package-name::symbol-name
Пакеты могут экспортировать символы. Тогда между названием пакета и названием символа пишется только одно двоеточие.
package:exported-symbol
Символы, которые не интернированы в пакет, также могут быть созданы и иметь обозначение:
#:uninterned-symbol
Постскриптум
[ редактировать ]В PostScript ссылки на имен объекты могут быть как буквальными , так и исполняемыми , что влияет на поведение интерпретатора при их встрече. cvx
и cvl
операторы могут использоваться для преобразования между двумя формами. Когда имена создаются из строк с помощью cvn
оператор, набор разрешенных символов не ограничен.
Пролог
[ редактировать ]В Прологе символы (или атомы) являются основными примитивными типами данных, похожими на числа. [9] Точные обозначения могут отличаться в разных диалектах Пролога. Однако это всегда довольно просто (кавычки или специальные начальные символы не требуются).
В отличие от многих других языков, символам можно придать значение , создав некоторые факты и/или правила Пролога.
Примеры
[ редактировать ]Следующий пример демонстрирует два факта (описывающих, что такое отец ) и одно правило (описывающее значение слова «брат/сестра »). В этих трех предложениях используются символы (отец, Зевс, Гермес, Персей и брат) и некоторые абстрактные переменные (X, Y и Z). Материнские . отношения опущены для ясности
father(zeus, hermes).
father(zeus, perseus).
sibling(X, Y) :- father(Z, X), father(Z, Y).
Руби
[ редактировать ]В Ruby символы можно создавать в буквальной форме или путем преобразования строки. [1] Их можно использовать как идентификатор или встроенную строку. [10] Два символа с одинаковым содержанием всегда будут относиться к одному и тому же объекту. [11] Считается лучшей практикой использовать символы в качестве ключей ассоциативного массива в Ruby. [10] [12]
Примеры
[ редактировать ]Ниже приведен простой пример символьного литерала в Ruby: [1]
my_symbol = :a
my_symbol = :"an identifier"
Строки можно преобразовать в символы, и наоборот:
irb(main):001:0> my_symbol = "Hello, world!".intern
=> :"Hello, world!"
irb(main):002:0> my_symbol = "Hello, world!".to_sym
=> :"Hello, world!"
irb(main):003:0> my_string = :hello.to_s
=> "hello"
Символы – это объекты Symbol
класс в Руби: [13]
irb(main):004:0> my_symbol = :hello_world
=> :hello_world
irb(main):005:0> my_symbol.length
=> 11
irb(main):006:0> my_symbol.class
=> Symbol
Символы обычно используются для динамической отправки сообщений (вызова методов) объектам:
irb(main):007:0> "aoboc".split("o")
=> ["a", "b", "c"]
irb(main):008:0> "aoboc".send(:split, "o") # same result
=> ["a", "b", "c"]
Символы как ключи ассоциативного массива:
irb(main):009:0> my_hash = { a: "apple", b: "banana" }
=> {:a=>"apple", :b=>"banana"}
irb(main):010:0> my_hash[:a]
=> "apple"
irb(main):011:0> my_hash[:b]
=> "banana"
Смолток
[ редактировать ]В Smalltalk символы можно создавать в буквальной форме или путем преобразования строки. Их можно использовать как идентификатор или встроенную строку. Два символа с одинаковым содержанием всегда будут относиться к одному и тому же объекту. [14] В большинстве реализаций Smalltalk селекторы (имена методов) реализованы как символы.
Примеры
[ редактировать ]Ниже приведен простой пример символьного литерала в Smalltalk:
my_symbol := #'an identifier' " Symbol literal "
my_symbol := #a " Technically, this is a selector literal. In most implementations, "
" selectors are symbols, so this is also a symbol literal "
Строки можно преобразовать в символы, и наоборот:
my_symbol := 'Hello, world!' asSymbol " => #'Hello, world!' "
my_string := #hello: asString " => 'hello:' "
Символы соответствуют symbol
протокол, и их класс называется Symbol
в большинстве реализаций:
my_symbol := #hello_world
my_symbol class " => Symbol "
Символы обычно используются для динамической отправки сообщений (вызова методов) объектам:
" same as 'foo' at: 2 "
'foo' perform: #at: with: 2 " => $o "
Ссылки
[ редактировать ]- ^ Перейти обратно: а б с Томас, Дэйв ; Фаулер, Чад; Хант, Энди (2001). Программирование на Ruby: руководство для прагматичных программистов; [включая Ruby 1.8] (2-е, 10-е изд.). Роли, Северная Каролина: Прагматичная книжная полка. ISBN 978-0-9745140-5-5 .
- ^ Символы на странице структур данных.
- ^ Ключевые слова на странице Структуры данных.
- ^ «Экскурсия по языку дартс | Символы» . Язык программирования Дартс . Проверено 17 января 2021 г.
- ^ "Юлия Кор.Символ" . Юлия Документация . Проверено 31 мая 2022 г.
- ^ «CLHS: СИМВОЛ системного класса» . www.lispworks.com .
- ^ «CLHS: ПАКЕТ системных классов» . www.lispworks.com .
- ^ Питер Норвиг : Парадигмы программирования искусственного интеллекта: тематические исследования в Common Lisp , Морган Кауфманн, 1991, ISBN 1-55860-191-0 , Интернет
- ^ Братко, Иван (2001). Программирование на Прологе для искусственного интеллекта . Харлоу, Англия; Нью-Йорк: Эддисон Уэсли. ISBN 978-0-201-40375-6 .
- ^ Перейти обратно: а б Кидд, Эрик (20 января 2007 г.). «13 способов взглянуть на рубиновый символ» . Случайные хаки . Проверено 10 июля 2011 г.
- ^ «Программирование Ruby: Руководство прагматичного программиста» . Ruby-doc.com .
- ^ «Использование символов по неправильной причине» . Гномические заметки .
- ^ «Символ» . Рубиновая документация . Проверено 10 июля 2011 г.
- ^ http://wiki.squeak.org/squeak/uploads/172/standard_v1_9-indexed.pdf Стандарт ANSI Smalltalk.