출력하기

print("이렇게 출력합니다")
(message "이렇게 출력합니다")
이렇게 출력합니다

emacslisp-배워보기

표현식 이해하기

리스트 형태의 표현식이 계산될 때 좌에서 우로 계산 되며 첫번째 원소는 함수의 정의로 나머지 원소는 인자들로 계산된 후 함수를 호출하게 된다. 호출된 함수가 리턴하는 값을 그 표현식의 값(value)라고 부른다.

(message "hello workd")
hello workd
(message "hello: %d" (+ 1 2))
hello: 3

메시지는 “hello: %“와 3을 argument로 받아 실핵된다.

심벌 이해하기

자신의 그대로 값으로 계산되지 않은 message + 를 심벌이라고 부른다. 이들은 쓰여진 위치에 따라 할당된 함수나 값으로 계산된다.

(message "withd %d" fill-column)
withd 70

심벌은 리스트 형태의 표현식에 첫 번째 원소의 위치로 쓰였을 때 함수로 계산된다. 그 외의는 전부 값으로 계산된다.

'(message "width %d" fill-column) ; (message "width %d" fill-column)
message width %d fill-column

위와 ‘가 붙으면 리스트 그 자체가 리턴된다. ‘를 리스트의 형태의 표현식에 적용한다는 것은 각 원소에 ‘를 적용하고 그 심벌들을 다시 리스트로 만드는 것을 의미한다.

리스트

cons

(cons 1 2)
(1 . 2)

cdr

(car (cons 1 2))
1

car

(cdr (cons 1 (cons 3 4)))
(3 . 4)

cons 구조에 대한 설명

위와 같은 cons의 구조는 linked list와 동일한 구조의 형태를 가지게 된다. cons의 오른쪽 박스가 다른 cons의 구조를 가리키게 되면서 여러개의 cons를 묶을 수 있게 된다.

(cons 1 (cons 2 (cons 3 nil )))
1 2 3

()는 nil을 표현한다. 이것을 특별히 nil로 동일하게 나타낸다.

(cons 1 (cons 2 nil))
(list 1 2 3)
1 2 3