Lisp와 Scheme
괄호만으로 프로그램을 쓸 수 있을까?
화면을 누르면 다음 장으로 넘어갑니다
Lisp의 데이터
재료는 원자와 리스트 둘뿐
최초의 함수형 언어 Lisp에는 원래 데이터의 종류가 원자(atom)와 리스트(list) 둘뿐이었습니다. 처음의 Lisp는 변수와 대입문이 없는 순수 함수형 언어였고, 뒤에 명령형 기능이 더해졌습니다.
리스트는 원자와 다른 리스트를 괄호로 묶은 것입니다. A, B 같은 글자는 예시입니다.
리스트의 속
안에서는 칸을 화살표로 이어 둡니다
Lisp의 리스트는 안에서 단일 연결 리스트로 저장됩니다. 1강에서 본, 값을 화살표로 줄줄이 이은 구조입니다. 서브리스트 (C D)는 따로 이어 두고 셋째 칸이 그것을 가리킵니다.
코드도 리스트
프로그램도 같은 괄호 모양입니다
5강에서 본 대로 Lisp에서는 데이터와 코드가 같은 괄호 모양입니다. (+ 5 2)는 원자 셋이 든 리스트이면서, 함수 +를 5와 2에 적용하라는 코드입니다.
6강에서 본 전위 표기(연산자를 앞에 쓰는 방식)입니다.
Scheme
Lisp를 작고 깔끔하게 다듬었습니다
Scheme은 1970년대 중반에 나온 Lisp 방언입니다. 당시의 다른 Lisp 방언보다 더 깔끔하고 현대적이며 단순한 언어를 목표로 했습니다. 지금부터의 예는 Scheme으로 봅니다.
방언은 한 언어에서 갈라져 나온 변종입니다. 정적 스코프는 4강에서 본 말입니다.
일급 함수
함수도 값처럼 다닙니다
Scheme에서 함수는 일급 객체(first-class)입니다. 식의 값이나 리스트의 원소가 될 수 있고, 이름에 묶거나 매개변수로 넘기거나 함수의 결과로 돌려줄 수 있습니다. 2편의 고차 함수가 그래서 가능합니다.
square는 뒤에서 만들 제곱 함수의 이름입니다.
평가
식은 안쪽 괄호부터 값으로 접힙니다
식의 값을 구하는 일이 평가입니다. Scheme의 +, -, *, / 는 기본 산술 함수여서 (+ 5 2)는 7이 됩니다. 괄호가 겹쳐 있으면 안쪽 괄호가 먼저 값으로 바뀌고, 그 값이 바깥 함수에 들어갑니다.
(* 3 (+ 5 2))는 예시입니다. ABS(절댓값), SQRT(제곱근), MIN, MAX도 기본 함수입니다.
다음 편