반응형
Emacs Lisp에서 이름이 닮은 let
과 let*
의 기능과 차이점을 간단히 정리해 봅시다.
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 |
댓글