ELisp 프로 그래 밍 7: 생 성 함수

defun 원형
https://www.gnu.org/software/emacs/manual/html_node / intr / defun. html 에 소 개 된 defun 이 완전 하지 않 습 니 다. 문서 가 너무 낡 았 나 봐 요.
http://www.gnu.org/software/emacs/manual/html_node / elisp / Defining - Function s. html 는 전 점 으로 emacs c - h f 와 차이 가 많 지 않 습 니 다.
다음은 Emacs c - h f 에 표 시 된 defun macro 도움말 문서 입 니 다.
defun is a Lisp macro.

(defun NAME ARGLIST &optional DOCSTRING DECL &rest BODY)

Define NAME as a function.
The definition is (lambda ARGLIST [DOCSTRING] BODY...).
See also the function `interactive'.
DECL is a declaration, optional, of the form (declare DECLS...) where
DECLS is a list of elements of the form (PROP . VALUES).  These are
interpreted according to `defun-declarations-alist'.
The return value is undefined.

[forward]

매개 변수 해석
NAME 는 함수 명 입 니 다.
ARGLIST 는 함수 가 받 아들 이 는 인자 입 니 다.
DOCSTRING 은 함수 의 기능 을 설명 하 는 문자열 입 니 다. emacs 도움말 시스템 에서 사용 할 것 입 니 다. 모든 함수 작성 자 에 게 가능 한 한 이 설명 을 쓰 는 것 을 권장 합 니 다.
DECL 은 함수 에 메타 데 이 터 를 추가 하 는 매크로 입 니 다. 예 를 들 어 이 함수 가 폐지 되 어야 한 다 는 것 을 설명 합 니 다.
& rest 는 inteactive 일 수 있 습 니 다. 그것 이 있 으 면 M - x 에서 함 수 를 직접 호출 할 수 있 습 니 다.
BODY 는 함수 체 입 니 다.
단순 함수 예
Emacs 로 test. el 파일 을 만 듭 니 다.다음 코드 를 작성 합 니 다:
(defun add2 (x)
  (+ 2 x))

(add2 8)

첫 번 째 단 계 는 함수 add 2 를 정의 하여 임의의 수치 x 를 전달 합 니 다. 모두 2 를 더 한 후에 돌아 갑 니 다. 이 함수 의 마지막 괄호 뒤에서 C - x C - e 를 실행 하여 이 함 수 를 만 듭 니 다.
그리고 2 단 호출 코드 맨 뒤에 C - x C - e 를 실행 합 니 다.
Mini - buffer 에서 10 을 볼 수 있 습 니 다.
좀 복잡 한 예
다음은 하나의 예 가 있다.
(defun sql-connect-preset (name)
  "Connect to a predefined SQL connection listed in `sql-connection-alist'"
  (eval `(let ,(cdr (assoc name sql-connection-alist))
    (flet ((sql-get-login (&rest what)))
      (sql-product-interactive sql-product)))))

sql - connect - preset 은 함수 이름 입 니 다.
(name) 매개 변수 목록
"Connect to..." 는 설명 문자 입 니 다.
마지막 으로 바디.
interactive
(inteactive) 가 있 으 면 M - x 를 통 해 eval - buffer 2 를 실행 할 수 있 습 니 다.그러나 이 함 수 는 init. el 에 넣 을 수도 있 고, 엘 파일 에 독립 적 으로 넣 은 다음 M - x load - file 을 실행 할 수도 있 습 니 다.
(defun eval-buffer2 ()
  (interactive)
  (eval-buffer nil (get-buffer-create "output")))

(inteactive) 인 자 를 받 아들 일 수 있 습 니 다. 나중에 자세히 말씀 드 리 겠 습 니 다.
국부 변수
let 함 수 는 부분 변 수 를 정의 하 는 데 사 용 됩 니 다. 이 변 수 는 다른 동명 의 변 수 를 차단 하지만 let 구문 내부 에서 유효 합 니 다.
let 는 세 부분 을 포함 하고 첫 번 째 는 let 함수 이 며, 두 번 째 는 varlist 이 며, 세 번 째 는 body 이 며, 즉 let 블록 내부 에서 실행 할 수 있 는 문 구 를 포함한다.
(let ((variable value)
           (variable value)
           ...)
       body...)

다음은 하나의 예 이다.
(let ((zebra 'stripes)
           (tiger 'fierce))
       (message "One kind of animal has %s and another is %s."
                zebra tiger))

좋은 웹페이지 즐겨찾기