기호(프로그래밍)
Symbol (programming)컴퓨터 프로그래밍에서 기호는 인스턴스가 사람이 읽을 수 있는 고유한 형식을 갖는 원시 데이터 유형입니다.기호를 식별자로 사용할 수 있습니다.어떤 프로그래밍 언어에서는,[1] 그것들은 원자라고 불립니다.고유성은 기호 테이블에 유지함으로써 적용됩니다.프로그래머에 의한 가장 일반적인 기호 사용은 언어 리플렉션(특히 콜백)을 수행하기 위한 것이며, 가장 일반적인 것은 객체 링크를 작성하기 위한 기호 사용입니다.
가장 간단한 구현에서는 기본적으로 이름이 붙은 정수(예: C의 열거형)입니다.
지지하다
언어 | 타입명 | 예제 리터럴 |
---|---|---|
ANSI 일반적인 리스프 | 기호, 키워드 | symbol ,:keyword |
클로쥬르 | 기호,[2] 키워드[3] | 'symbol ,:keyword |
Dart(프로그래밍 언어) | 기호[4] | #sym |
엘릭시르 | 원자, 기호 | :sym |
얼랑 | 원자 | sym 또는'sym' |
줄리아. | 기호. | :sym |
목표-C | 셀 | @selector(sym) |
PICAXE 기본의 | 기호. | symbol let name = variable |
프롤로그 | 원자, 기호 | sym 또는'sym' |
루비 | 기호. | :sym 또는:'sym' |
스칼라 | scala.기호 | 'symbol |
스킴 | 기호. | sym |
스몰토크 | 기호. | #sym 또는#'sym' |
SML/NJ | ATOM.ATOM | |
JavaScript (ES6 이후) | 기호. | Symbol("sym"); |
울프람어 | 기호. | Symbol["sym"] 또는sym |
K(프로그래밍 언어) | 기호. | 「그럴 수 있다 |
줄리아.
Julia에서 기호는 구문 분석된 AST(Julia 코드)에서 식별자를 나타내는 데 사용되는 내부 문자열이며, 엔티티를 식별하기 위한 이름 또는 레이블(예: [5]사전의 키)로 사용됩니다.
리스프
Lisp의 기호는 네임스페이스(또는 Common Lisp의 패키지)에서 고유합니다.기호는 기능 EQ와 동일한지 테스트할 수 있습니다.리스프 프로그램은 런타임에 새로운 기호를 생성할 수 있습니다.Lisp가 텍스트로 표시된 기호를 포함하는 데이터를 읽을 때 기존 기호가 참조됩니다.기호를 알 수 없는 경우 Lisp 판독기가 새 기호를 만듭니다.
공통 리스프 기호에는 이름, 값, 함수, 속성 목록 및 [6]패키지의 속성이 있습니다.
Common Lisp에서는 기호가 패키지에 삽입되지 않을 수도 있습니다.이러한 기호를 인쇄할 수 있지만 다시 읽을 때는 새 기호를 만들어야 합니다.*interned*가 아니기 때문에 패키지에서 원래 기호를 검색할 수 없습니다.
공통 리스프 기호에서는 공백이나 줄 바꿈 등 공백을 포함한 모든 문자를 사용할 수 있습니다.심볼에 공백 문자가 포함되어 있는 경우, 심볼인 것처럼 작성해야 합니다.심볼은 변수, 함수, 매크로, 클래스, 유형, goto 태그 등 명명된 프로그래밍 구조의 식별자로 사용할 수 있습니다.기호는 [7]패키지에 삽입할 수 있습니다.키워드 기호는 자체 평가되며[8] KEWORD라는 이름의 패키지에 삽입됩니다.
예
이-이-이-이-이-이-이-이-이-이-
기호에는 공백(및 기타 모든 문자)을 포함할 수 있습니다.
공백이 있는 기호입니다.
인쇄된 표현에 선두 콜론이 있는 일반 리스프 기호에서는 키워드 기호가 있습니다.이것들은 키워드 패키지에 삽입되어 있습니다.
: syslog-interface
기호의 인쇄 표현은 패키지명을 포함할 수 있다.패키지 이름과 기호 이름 사이에는 두 개의 콜론이 표시됩니다.
패키지 이름:: package-name
패키지는 기호를 내보낼 수 있습니다.그런 다음 패키지 이름과 기호 이름 사이에 콜론이 하나만 표시됩니다.
패키지: syslog-module
패키지에 삽입되지 않은 기호를 만들 수도 있으며 다음과 같은 기호가 있습니다.
#: uninternal-internal-displayed
프롤로그
프롤로그에서 기호(또는 원자)는 [9]숫자와 유사한 기본 데이터 유형입니다.정확한 표기법은 프롤로그의 방언에 따라 다를 수 있습니다.단, 항상 매우 간단합니다(따옴표나 특별한 시작 문자는 필요 없습니다).
다른 언어와는 달리 프롤로그의 사실 및/또는 규칙을 만들어 심볼에 의미를 부여할 수 있습니다.
예
다음 예시는 두 가지 사실(아버지가 무엇인지 설명)과 하나의 규칙(자매의 의미를 설명)을 보여줍니다.이 세 문장은 기호와 추상 변수 (X, Y, Z)를 사용한다.모계 관계는 명확성을 위해 생략되었다.
아버지.(제우스, 에르메스). 아버지.(제우스, 페르세우스). 형제(X, Y) :- 아버지.(Z, X), 아버지.(Z, Y).
루비
Ruby에서는 문자 그대로의 형태로 또는 문자열을 [1]변환하여 기호를 만들 수 있습니다.ID 또는 내부 [10]문자열로 사용할 수 있습니다.같은 내용의 두 기호는 항상 같은 [11]객체를 참조합니다.Ruby에서는 기호를 연관 배열의 키로 사용하는 것이 가장 좋은 방법이라고 생각됩니다.[10][12]
예
다음은 [1]Ruby 기호 리터럴의 간단한 예입니다.
my_my_my_my_my_my_my = :a my_my_my_my_my_my_my = :"식별자"
문자열은 기호로 강제할 수 있으며, 그 반대도 마찬가지입니다.
irb(메인):001:0>my_my_my_my_my_my_my = "안녕, 세상아!".인턴 =>"안녕하세요, 세상아!" irb(메인):002:0>my_my_my_my_my_my_my = "안녕, 세상아!".행선지 =>"안녕하세요, 세상아!" irb(메인):003:0>my_string = : 안녕하세요.행선지 => "안녕하세요"
기호는 의 객체입니다.Symbol
클래스([13]루비):
irb(메인):004:0>my_my_my_my_my_my_my = : hello_world => : hello_world irb(메인):005:0>my_my_my_my_my_my_my.길이 => 11 irb(메인):006:0 >my_my_my_my_my_my_my.학급 => 기호
일반적으로 기호는 (콜 메서드의) 오브젝트에 메시지를 동적으로 보내기 위해 사용됩니다.
irb(메인):007:0>"aoboc".분열되다("o") => ["a", "b", "c"] irb(메인):008:0>"aoboc".보내세요(: 개요, "o") # 같은 결과 => ["a", "b", "c"]
연관 배열의 키로서의 기호:
irb(메인):009:0 >my_my_my_my_my_my_my = { a: "애플", b: "실패" } => {:a=>"apple", :b=>"flash"} irb(메인): 010:0>my_my_my_my_my_my_my[:a] => "애플" irb(메인):011:0>my_my_my_my_my_my_my[: b] => "실행"
스몰토크
Smalltalk에서는 리터럴 형식을 사용하거나 문자열을 변환하여 기호를 만들 수 있습니다.ID 또는 내부 문자열로 사용할 수 있습니다.같은 내용의 두 기호는 항상 같은 [14]객체를 참조합니다.대부분의 Smalltalk 구현에서는 실렉터(방식명)가 기호로 구현됩니다.
예
다음은 Smalltalk의 심볼 리터럴의 간단한 예입니다.
my_my_my_my_my_my_my := #'식별자' "기호 문자 그대로" my_my_my_my_my_my_my := #a 엄밀히 말하면, 이것은 셀렉터 리터럴입니다.대부분의 구현에서는 "실렉터는 기호이므로 이 또한 기호 리터럴입니다."
문자열은 기호로 강제할 수 있으며, 그 반대도 마찬가지입니다.
my_my_my_my_my_my_my := 안녕, 세상아! asymbol => #'안녕하세요, 세상아!' my_string := #안녕하세요: asString " = > "안녕하세요"
기호는 에 준거합니다.symbol
프로토콜, 그리고 그들의 클래스는Symbol
대부분의 구현에서는 다음과 같습니다.
my_my_my_my_my_my_my := #hello_world my_my_my_my_my_my_my 학급 "=> 기호"
일반적으로 기호는 (콜 메서드의) 오브젝트에 메시지를 동적으로 보내기 위해 사용됩니다.
'foo'와 같은 위치: 2" '푸' 실행: #: 포함: 2 " = > $o "
레퍼런스
- ^ a b c Hunt, Dave Thomas ; Chad Fowler ; Andy (2001). Programming Ruby the pragmatic programmers' guide ; [includes Ruby 1.8] (2. ed., 10. print. ed.). Raleigh, NC: The Pragmatic Bookshelf. ISBN 978-0-9745140-5-5.
- ^ 데이터 구조 페이지의 기호
- ^ 데이터 구조 페이지의 키워드
- ^ "A tour of the Dart language Symbols". Dart programming language. Retrieved 17 January 2021.
- ^ "Julia Core.Symbol". Julia Documentation. Retrieved 31 May 2022.
- ^ 공통 Lisp HyperSpec, 시스템 클래스 기호
- ^ 공통 Lisp HyperSpec, 시스템 클래스 패키지
- ^ Peter Norvig: 인공지능 프로그래밍의 패러다임: 공통 리스프에서의 사례 연구, Morgan Kaufmann, 1991, ISBN 1-55860-191-0, Web
- ^ Bratko, Ivan (2001). Prolog programming for artificial intelligence. Harlow, England ; New York: Addison Wesley. ISBN 978-0-201-40375-6.
- ^ a b Kidd, Eric. "13 Ways of Looking at a Ruby Symbol". Random Hacks. Retrieved 10 July 2011.
- ^ "Programming Ruby: The Pragmatic Programmer's Guide".
- ^ "Using Symbols for the Wrong Reason". Gnomic Notes.
- ^ "Symbol". Ruby Documentation. Retrieved 10 July 2011.
- ^ http://wiki.squeak.org/squeak/uploads/172/standard_v1_9-indexed.pdf ANSI Smalltalk 표준.