본문 바로가기

Let과 Let* (Emacs Lisp)

기술적인 이야기/이맥스 2020. 3. 30.
반응형

Emacs Lisp에서 이름이 닮은 letlet*의 기능과 차이점을 간단히 정리해 봅시다.

let

let은 Emacs Lisp에서 지역 변수(Local Variable)를 정의할 때 사용합니다.

(let ((a 1)
      (b 2))
  (+ a b))

;; => 3

let 내부에는 progn 처럼 Lisp 코드를 나열할 수 있고 마지막 값이 반환 값처럼 동작합니다.

생성된 변수는 지역 변수이기 때문에 let 리스트 외부에서는 동일한 이름의 변수에 접근할 수 없습니다.

(let ((a 1)
      (b 2))
  (+ a b))
(+ a b)

;; => Symbol's value as variable is void: a

각각의 변수는 각자의 영역(?)에서 생성되기 때문에 초기화 단계에서 서로를 참조할 수 없습니다.

(let ((a 1)
      (b 2)
      (c (+ a b)))
  (+ a b c))

;; => Symbol's value as variable is void: a

만약 이렇게 생성 단계에서 다른 심벌을 참조하고 싶다면 let*를 사용할 수 있습니다.

let*

let*let과 동일한 용도로 지역 변수를 생성하는 용도로 사용되며 대부분 동일합니다. 단지 let과는 다르게 순차적으로 변수가 생성되기 때문에 앞 순서에서 생성된 변수를 뒤에서 선언할 때 참조할 수 있습니다.

(let* ((a 1)
       (b 2)
       (c (+ a b)))
  c)

;; => 3

let*가 아무래도 사용하기에 편한 경우가 많았습니다만 나눠져 있는 이유가 있을 거라 생각되니 이런 경우가 아니라면 let을 사용하는 게 더 좋을 것 같다는 생각이 듭니다.

728x90
반응형

'기술적인 이야기 > 이맥스' 카테고리의 다른 글

Emacs 업그레이드 후 겪은 Doom Emacs 오류 문제  (1248) 2020.06.17
Property List (Emacs Lisp)  (253) 2020.03.30
Filter와 Map (Emacs Lisp)  (1235) 2020.03.30
문자열 처리 함수들 (Emacs Lisp)  (1020) 2020.03.29
리스트 다루기 (Emacs Lisp)  (889) 2020.03.24

댓글