M-표현상
M-expression컴퓨터 프로그래밍에서 M-표현식(또는 메타 표현식)은 포트란과 ALGOL과 같은 현대 언어에서 영감을 얻은 리스프 프로그래밍 언어의 초기 제안 구문이었다.이 표기법은 언어에 구현된 적이 없으며,[1] 따라서 최종화된 적도 없습니다.
S 표현식과 비교하여 M 표현식은 함수 표기법, infix 연산자(a를 포함)를 도입합니다.defun
연산자) 및 줄임말cond
그리고.list
언어로 [2]변환합니다.
배경
존 맥카시는 1960년 매사추세츠공대 연구원이던 중 리스프에 관한 첫 논문을 발표했다.이 책에서 그는 복잡한 구조를 목록으로 나타낼 수 있는 기호 표현(S-표현식)의 언어를 묘사했다.그런 다음 S 표현식에 대한 일련의 원시 연산과 보다 복잡한 연산을 정의하는 데 사용할 수 있는 메타 표현(M 표현식) 언어를 정의했습니다.마지막으로, 그는 메타 언어 자체가 어떻게 S-표현으로 표현될 수 있는지 보여주었고, 결과적으로 잠재적으로 자가 [3]호스팅되는 시스템을 만들었다.이 문서의 초안 버전은 "AI 메모 8"[4]로 알려져 있습니다.
식형 | 수학 표기법 | M-표현상 | 현대 리스프 S-표현상 |
---|---|---|---|
리스트 값 | [1;2;3] | (quote (1 2 3)) | |
기능 응용 프로그램 | f[x;y] | (f x y) | |
함수 정의 | label[square;λ[[x];times[x;x]]] | (define square (lambda (x) (* x x))) | |
조건식 | [lessp[x;0] → minus[x]; T → x] | (cond ((< x 0) (- x)) (t x)) |
McCarthy는 M-표현식을 언어 구문으로 사용하고 S-표현식을 사용하여 컴파일러의 내부 프로세스를 설명하는 자동 리스프 컴파일러(LISP 2)를 개발할 계획이었다.스테판 B. 러셀은 신문을 읽고 그에게 S-표현이 더 편리한 구문이라고 제안했다.맥카시는 이 아이디어를 탐탁지 않게 여겼지만 러셀과 동료 다니엘 J. 에드워즈는 S-표현을 [2]실행할 수 있는 통역 프로그램을 손으로 코딩했다.이 프로그램은 맥카시의 연구 그룹에 의해 채택되어 S-표현을 리스프의 지배적인 형태로 확립했습니다.
매카시는 1979년 M-expressions의 운명을 되새겼습니다.
M 표현식을 정확하게 정의하고 편집하거나 적어도 S 표현식으로 변환하는 프로젝트는 확정되거나 명시적으로 포기되지 않았다.그것은 단지 무기한의 미래로 물러났고,[5] 고안될 수 있는 어떤 FORTRAN과 같은 표기법이나 ALGOL과 같은 표기법보다 내부 표기법을 선호하는 새로운 세대의 프로그래머들이 나타났다.
--
실장
설탕이 첨가된 M 표현식의 형태는 1988년부터 울프람 매스매티카의 울프람 언어로 구현되어 왔다.
식형 | Sugared 구문(InputForm) | 함수 양식(Full Form) |
---|---|---|
리스트 값 | {1, 2, 3} | List[1, 2, 3] |
기능 응용 프로그램 | f[x, y] | f[x, y] |
함수 정의 |
|
|
(언어의 일반적인 조건부 시스템은 패턴의 일치와 개서에 의존하기 때문에 조건의 설명에는 더 많은 것이 필요합니다.)[6]
LISP의 경우
MLisp는 Lisp를 위한 M-expression과 같은 프런트엔드를 구현하기 위한 현대적인 프로젝트(1968-1973)였습니다.위생 매크로, 패턴 매칭 및 역추적과 같은 몇 가지 추가 기능이 통합되었습니다.그것은 결국 버려진 LISP70 드래프트로 진화했다.1989년의 M-LISP(MetaLISP)는 [7]M-식을 Scheme와 혼합하려는 또 다른 시도였다.
"AI Memo 8" M-표현의 파서는 Common Lisp에서 이용할 수 있지만,[8] 저자는 매크로에 대처할 수 없다는 인식 때문에 M-표현에 반대하는 사례라고 의도하고 있다.
K의 경우
K(프로그래밍 언어)에는 MPL 전통에서 보다 간결한 표기법과 더불어 M-Expression도 포함됩니다.
fibs: {[n] if[less [n;3];:iota[n] fibrec:{[list] if[cisco[n;count[list];:list] a:list[count[count];1] b:list[count[count];2] :_f[cisco[list;plus[a;b]] } : screc[(0;1)] }
추가 개발
CGOL(1977)은 MacLisp에서 구현되었으며 infix [7]연산자와 함께 Algol과 유사한 구문을 도입하는 유사한 목표를 따르고 있습니다.이것은 암곰 커먼 리스프에 [9]효과가 있는 것으로 알려져 있다.
보다 최근의 (car 2003년 경) 변형은 I 표현식입니다.I 표현식은 들여쓰기를 사용하여 괄호를 암시적으로 나타내므로 어떤 면에서는 S 표현식과 M 표현식의 중간입니다.I 표현식은 Scheme의 보조 구문으로서 Scheme Request For Implementation 49에 도입되었지만 널리 [10]채택되지는 않았습니다.
더 발전된 것은 "sweet" t 표현식입니다. 이 표현식에는 우선순위가 없는 infix 연산자가 있습니다.I-표현식과 마찬가지로 t-표현은 S-표현식에서 벗어난 단순한 변환일 뿐이므로 이론적으로는 어떤 리스프 방언에서도 사용할 수 있고 [11]매크로와 같은 기능을 방해하지 않습니다.
추가적인 구문 관련으로는 애플의 딜런(Algol과 유사한 토큰)과 Clojure의 다른 리터럴 [7]구문 추가가 있다.
레퍼런스
- ^ "The implementation of LISP". www-formal.stanford.edu. Retrieved 2020-03-29.
- ^ a b c "LISP 1.5 Programmer's Manual" (PDF). Community.computerhistory.org. 1965. Archived from the original (PDF) on 2006-02-11. Retrieved 2013-09-02.
- ^ McCarthy, John(1960년 4월) "기호 표현과 기계에 의한 계산의 반복 함수, 파트 I"
- ^ McCarthy, John (March 1959). "Recursive Functions of Symbolic Expressions and Their Computation by Machine (AI Memo 8)".
- ^ "The implementation of LISP". Formal.stanford.edu. 1979-02-12. Retrieved 2013-08-24.
- ^ Mathematica as a Rewrite Language.
- ^ a b c Lee, Xah. "LISP Infix Syntax Survey".
- ^ "A Parser for M-Expressions".
Let's newbies play with them, and realize how impractical they are. Note for example, that we cannot use macros anymore because their syntax would need to be known by the M-expression parser.
- ^ 암곰 공통 리스프 구현 블로그의 ABCL 개발에 관한 CGOL.
- ^ Möller, Egil (2003). "SRFI 49: Indentation-sensitive syntax". srfi.schemers.org.
- ^ Wheeler, DA (2013). "SRFI 110: Sweet-expressions (t-expressions)". srfi.schemers.org.