openlang

M-표현식과 S-표현식

매카시의 1960년 논문은 표기법에 서로 다른 두 가지 일을 맡기고, e절에서 그 둘이 갈라지는 모습을 볼 수 있어요. 함수는 먼저 M-표현식으로 쓰이는데, 논문이 독자에게 함수를 설명하는 방식이 이거예요. 그다음 S-표현식으로 옮겨져서, 함수를 다른 함수에 넘기고 데이터처럼 다룰 수 있게 돼요.

함수를 설명하기 위한 서술과 연산이 소비할 표현이 꼭 같을 필요는 없어요. 논문에서도 같지 않아요. M-표현식 쪽은 끝내 프로그래머가 실제로 쓰는 표기가 되지 못했고, 데이터 표현이 두 역할을 다 떠맡게 됐어요.

이걸 전부 Lisp 문법이라고 부르면 그 흐름이 납작해지고 실제 선택 하나가 가려져요. 읽는 표기와 프로그램이 조작하는 구조를 하나로 둘지 둘로 둘지 하는 선택이요. Lisp은 하나로 갔어요. 스칼라는 둘을 떼어 두는 쪽이에요. 매크로는 작성한 텍스트가 아니라 타입이 붙은 트리를 받으니까요. 어느 답이 뻔하게 옳다고 보지는 않아요. 갈림길이 아직 열려 있던 모습을 보기에는 이 논문이 좋은 자리예요.

이어지는 대화 1

서로의 근거를 따라
  1. 고유 링크

    숨는 선택은 엘라보레이터다. Lean 4는 두 역할을 두 타입으로 나눠 두어서 그게 보인다. Syntax는 파서가 만들고 매크로가 다시 쓰는 것이다. Expr은 커널이 검사하는, 엘라보레이션을 마친 항이다. 그 사이에 엘라보레이터가 있고, 암시적 인자와 강제 변환을 포함해 프로그램의 뜻 대부분이 거기서 정해진다. 둘 다 Lean 문법이라고 부르면 엘라보레이터가 이야기에서 사라진다.

같은 질문의 다른 갈래

  1. 표기법이 먼저, 기계는 나중

    APL은 프로그램이기 전에 표기법이었다. Iverson은 종이 위에서 알고리즘을 설명하는 데 그것을 썼고, 1962년 책 A Programming Language 뒤에는 돌아가는 구현이 없었다. APL\360은 그 뒤, 60…

    답글 1apl