부지런한 거야, 게으른 거야?

3869 단어 emacselisp
전편'첫인사'는 Emacs Lisp로 Emacs 컴퓨터에서 실행할 수 있는 Hello World 프로그램을 어떻게 쓰는지 설명한다.
우리는 아주 간단한 hello-world 함수를 통해 Emacs 컴퓨터에 첫인사를 보냈다.
hello-world 함수의 정의는 매우 간단하다.
(defun hello-world ()
  (interactive)
  (insert "hello, world"))

그러나 Emacs Lisp 언어로 함수를 정의하는 방법과interactiveinsert의 용법을 알게 되면 우리는 부지런한 사람에서 게으른 사람으로 탈바꿈하는 경우가 많다.
이전에 한동안 저는 POV-Ray[1]로 간단한 3차원 장면을 과장했습니다. 저는 POV-Ray에 장면 파일을 제공했고 POV-Ray는 광선 추적 기술을 사용하여 장면 파일의 설명을 바탕으로 3차원 과장을 완성했습니다.각 POV-Ray 장면 설명 파일은 다음 내용으로 시작하는 경우가 많습니다.
#version 3.7;
#include "colors.inc"

global_settings {
  assumed_gamma 1.0
}

처음에 나는 비교적 부지런해서 모든 장면 파일에 상술한 내용을 진지하게 수동으로 입력할 것이다.지금 이럴 필요 없어, init.El에서는 다음과 같이 함수를 정의합니다.
(defun povray-head ()
  (interactive)
  (insert
   "#version 3.7
" "#include \"colors.inc\"

" "global_settings {
" " assumed_gamma 1.0
" "}
"))

이렇게 하면 내가 POV-Ray 장면 파일을 새로 만든 후에 Emacs에 M-x povray-head 명령만 보내면 장면 파일에 자동으로 상술한 내용이 나타난다.
보아하니 그다지 뛰어난 프로그래밍 기술이 필요하지 않고 hello-world 함수를 약간 바꾸면 많은 중복적인 노동을 절약할 수 있다.물리학의 측면에서 볼 때, 내가 많은 POV-Ray 장면 묘사 파일을 작성할 때, 이 povray-head 함수는 나로 하여금 더욱 힘을 절약할 수 있게 한다.
그래서 내가 보기에 프로그램은 먼저 유용한 기계가 되어야 한다. 이것은 지렛대, 활차, 사면 등 기본적인 성력 장치와 본질적인 차이가 존재하지 말아야 한다.따라서 프로그램을 쓰기 전에 이 프로그램이 당신이나 다른 프로그램을 사용하는 사람들로 하여금 더욱 힘을 절약할 수 있는지를 명확히 해야 한다.불필요한 절차는 쓸 필요가 없다.
최근에 Emacs Lisp 프로그래밍 방면의 문장을 몇 편 쓰기 위해서 나는 어쩔 수 없이 Emacs에서 프로그래밍을 했다.실제로 나도 자주 C 언어를 사용하여 Emacs의 숙주 시스템에서 프로그래밍을 해야 한다.나는 항상 아래와 같은 코드를 써야 한다.
double *foo = malloc(n * sizeof(double));

C 언어를 배우지 않았다면 이 코드의 의미에 신경 쓰지 않고 일반적인 텍스트로 간주하면 된다.만약 이 코드를 손으로 쓴다면, 나는 반드시 두 번 써야 한다. double지금, 나는 다시 init.el에서 c-malloc 함수를 정의하여 이 코드를 쓸 때 힘을 절약할 수 있도록 합니다.
다음은 c-malloc의 정의입니다.
(defun c-malloc (name type n)
  (interactive
   (list (read-string "    ?")
     (read-string "  ?")
     (read-string "  ?")))
  (insert (format "%s *%s = malloc(%s * sizeof(%s));" type name n type)))

이 함수의 정의는 hello-worldpovray-head와 달리 매개 변수를 가진 함수이다.이후 두 가지에 비해 이것은 우리가 수학에서 함수에 대한 일반적인 인식, 즉 w=f(x, y,z) 또는 f:(x, y,z)->w에 더욱 부합된다.
당분간c-malloc의 세부 사항을 고려하지 않고 어떻게 일을 하는지 먼저 봅시다.
Emacs에서 init를 다시 로드한 경우l 파일, 그러면 M-x c-malloc 명령을 사용하면 Emacs Lisp 해석기가 c-malloc에 대해 값을 구할 수 있지만 Emacs는 상기 명령을 실행한 후에 마이크로 버퍼에서 나에게 세 가지 문제를 물어본다.
첫 번째 질문:

나는 (마이크로 버퍼에) 지령 foo 을 입력하고 이 문제에 대답했다.이어서 Emacs가 다시 묻는다.

나는 지령double 을 입력하고 이 문제에 대답했다.마지막으로 Emacs는 다음과 같이 묻습니다.

대답n .
참고:는 Enter 키를 클릭한 것을 나타냅니다.예컨대n , 입력n 이후 Enter 키를 클릭합니다.
이 세 가지 질문에 대답하면 Emacs가 버퍼에 표시됩니다.
double *foo = malloc(n * sizeof(double));

실제로 Emacs는 나의 답안을 받아들인 후에 그것들을 순서대로 c-malloc의 세 개의 매개 변수name, type, n에 귀속시킨다. 이것은 다음과 같은 표현식을 형성한 것과 같다.
(c-malloc "foo" "double" "n")

다음에 Emacs Lisp 해석기가 이 표현식에 값을 구하면 그 결과는 버퍼에 삽입된다
double *foo = malloc(n * sizeof(double));

이처럼 자질구레하지만 빈도가 비교적 높은 코드 세션이 나타나면 약간의 시간을 들여 프로그래밍 방식으로 그것들을 생성하면 힘을 절약할 뿐만 아니라 수동으로 입력하는 오류도 피할 수 있다.부지런한 사람은 프로그래밍으로 자신을 게으르게 해야지 프로그램으로 살게 해서는 안 된다.
위에서 언급한 Emacs Lisp 코드는 알아보지 못해도 상관없다. 다음 편부터 Emacs Lisp의 텍스트 처리에 대한 프로그래밍 지식을 다루기 시작했기 때문이다.
원자와 허공
[1] http://povray.org/

좋은 웹페이지 즐겨찾기