본문 바로가기
반응형

Lisp11

Property List (Emacs Lisp) Property List(plist) 아래처럼 key-value가 나열되는 형태를 프로퍼티 리스트라고 합니다. '(name "Conrad" age 20 phone "82-10-1234-5678" address "Earth, Milkyway, Laniakea Supercluster") 일반적인 언어의 사전형(Dictionary) 타입과 비슷한 형태로 유추됩니다. 키를 위 처럼 그냥 문자열로 해도 되고 콜론(:)으로 시작되는 심볼로 해도 관계는 없습니다. 하지만 백틱을 이용해 인용(quote)한 상태로 정의해버리면 나중에 액세스가 힘들어질 수도 있습니다. 값 읽기 값을 읽을 때는 plist-get을 사용합니다. (let ((plist '(name "Conrad" age 20 phone "82-10-1234-.. 2020. 3. 30.
Let과 Let* (Emacs Lisp) 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 각각의 변수는 각자의 영역(?)에서 생성되기 때문에 초기화 단계에서 서로를 참조할 수 없습니다. (l.. 2020. 3. 30.
Filter와 Map (Emacs Lisp) Filter (require 'seq) (seq-filter (lambda (x) (= 0 (% x 2))) '(1 2 3 4 5 6)) ;; => (2 4 6) seq 패키지에 들어있는 함수이기 때문에 상황에 따라 임포트를 해야할 수도 있습니다. Map (mapcar (lambda (x) (* x 2)) '(1 2 3 4 5)) ;; => (2 4 6 8 10) 물론 lambda 대신 일반적인 함수도 사용할 수 있습니다. Map(2) (mapc (lambda (x) (* x 2)) '(1 2 3 4 5)) ;; => (1 2 3 4 5) 이름 때문에 적어보긴 했는데, 사실 mapc는 Map이라고 하기엔 좀 그렇고, 오히려 Interation에 가깝습니다. 따라서 다른 언어의 for문과 비슷하게 리스트 .. 2020. 3. 30.
문자열 처리 함수들 (Emacs Lisp) 문자열 생성 이어붙이기 (concat "a" "b" "c") ;; => "abc" 포매팅(Formatting) (format "%d + %d = %d" 10 20 30) ;; => "10 + 20 = 30" 문자열 리스트 나누기(Split) (split-string "my name is conrad" " ") ;; => ("my" "name" "is" "conrad") 마지막 파라미터를 구분자로 이용해 입력된 문자열을 리스트로 나눠줍니다. 합치기(Join) (string-join '("my" "name" "is" "conrad") " ") ;; => "my name is conrad" 마지막 파라미터는 생략 가능합니다. 기타 문자열 비교 (string= "abc" "abc") ;; => t 문자열 검색 .. 2020. 3. 29.
리스트 다루기 (Emacs Lisp) 리스트 생성 그냥 생성하기 (list 1 2 3 4) ;; => (1 2 3 4) 위의 경우가 가장 가독성은 좋은 코드이겠지만 보통은 아래처럼 백틱을 이용한 quote 구문을 많이 사용합니다. '(1 2 3 4) ;; => (1 2 3 4) 순차적인 리스트 만들기 (number-sequence 2 5) ;; => (2 3 4 5) 굳이 정수가 아니라도 사용 가능하니 매뉴얼을 읽어봅시다. 리스트에 추가하기 제일 앞에 추가하기 (cons 1 '(2 3 4)) ;; => (1 2 3 4) 리스트끼리 연결하기 (append '(1 2 3) '(4 5 6)) ;; => (1 2 3 4 5 6) 리스트끼리 연결하기(2) (let ((some-list '(1 2 3))) (nconc some-list '(4)) so.. 2020. 3. 24.
Emacs 이 블로그의 Emacs Note 카테고리 글 일부를 별도로 링크로 정리하는 글입니다. 카테고리로 보기가 불편할 때 참고하기 위한 지극히 개인적인 용도입니다. Emacs Lisp 리스트 다루기 파일/디렉토리 경로와 관련된 Emacs Lisp 함수들 문자열 처리 함수들 Filter와 Map Let과 Let* Property List Emacs Lisp Snippets 파일 읽어서 내용 수정하고 저장하기 Org Mode Tips Org Mode 문서에 외부 이미지 넣기 Org Mode 테이블 스프레드시트 Org Publish로 익스포트 자동화하기 2020. 3. 24.
파일/디렉토리 경로와 관련된 Emacs Lisp 함수들 파일 경로나 디렉터리 경로를 다루는 Emacs Lisp 함수 몇 가지를 정리합니다. 완벽한(?) 경로 구하기 (expand-file-name "~/.emacs.d") ;; => "/Users/seorenn/.emacs.d" UNIX에서 홈 디렉터리($HOME)를 축약해서 표시하는 문자인 ~(Tilde, 물결 혹은 지렁이 무늬)를 원래 경로로 치환하는 데 주로 사용합니다. 와일드카드를 이용해 특정 경로의 파일 목록 구하기 (file-expand-wildcards "~/.emacs.d/*.el") ;; => ("~/.emacs.d/early-init.el" "~/.emacs.d/init.el" "~/.emacs.d/init.example.el") 배치 작업을 위해 파일 목록을 구할 때 편하게 사용할 수 있습.. 2020. 3. 23.
파일 읽어서 내용 수정하고 저장하기 (Emacs Lisp) Emacs Lisp을 이용해 특정 파일 내용을 읽어서 여기에 몇 가지 내용을 추가한 후 다른 파일로 저장하는 코드입니다. (with-temp-buffer (insert-file-contents "/foo/bar/file.md") (goto-char (point-min)) (insert "# New Header") (search-forward "Status: ") (insert "TODO") (goto-char (point-max)) (insert "# Footer") (write-file "/foo/bar/file-updated.md")) 추가로 아래와 같은 함수를 참고할 수 있습니다. (erase-buffer) :: 버퍼 내용을 몽땅 삭제 (delete-char N) :: N 개수만큼 글자를 삭제 (s.. 2020. 3. 23.
흥미로운 링크들 1월 5주차 한 주 간의 개인적으로 흥미로웠던 소식을 위주로 모아보는 글입니다. 이번 편은 한 유명 안티바이러스 백신 개발사의 개인정보 판매 사건부터 시작합니다. https://www.vice.com/en_us/article/qjdkq7/avast-antivirus-sells-user-browsing-data-investigation Leaked Documents Expose the Secretive Market for Your Web Browsing Data An Avast antivirus subsidiary sells 'Every search. Every click. Every buy. On every site.' Its clients have included Home Depot, Google, Microsof.. 2020. 2. 3.
흥미로운 링크들 1월 3주차 이번엔 개발 관련 소식들이 좀 있네요. https://github.com/swift-embedded/swift-embedded swift-embedded/swift-embedded Swift for Embedded Systems ✨. Contribute to swift-embedded/swift-embedded development by creating an account on GitHub. github.com Swift는 바이너리 코드로 컴파일하는 언어입니다. 그렇다면 임베디드 분야에서 못 쓸 이유가 없지요. 네~ 임베디드 스위프트입니다. https://sungdoo.dev/programming/start-ios-development-with-offical-docs/ 공식문서 만으로 iOS 개발 배우기.. 2020. 1. 20.
Org Mode 문서에 외부 이미지 넣기 Org Mode 문서에 이미지를 넣기 위해서는 단순히 이미지 파일을 준비해놓고 아래처럼 링크 문법으로 이미지 파일의 경로를 적어주면 됩니다. [[./foo/bar/image.png]] 하지만 외부 이미지, 즉 다른 사이트에 있는 이미지를 문서에 첨부하려는 경우는 좀 다릅니다. 예를 들어 아래의 경우를 봅시다. [[https://foo.bar/img/image.png]] 위 링크는 과연 이미지가 나올까요? 아니면 링크가 걸릴까요? 물론 평범하게 URL 링크가 걸리게 됩니다. 따라서 당연하게도 익스포트 한 결과물에는 이미지가 나오지 않지요. 자 그러면 이 문제를 어떻게 해결하면 좋을까요? 커스텀 링크 Org Mode에는 친절하게도 org-add-link-type 함수를 이용해 커스텀 링크를 추가하는 방법을 .. 2020. 1. 14.
728x90
반응형