부지런한 거야, 게으른 거야?
우리는 아주 간단한
hello-world
함수를 통해 Emacs 컴퓨터에 첫인사를 보냈다.이
hello-world
함수의 정의는 매우 간단하다.(defun hello-world ()
(interactive)
(insert "hello, world"))
그러나 Emacs Lisp 언어로 함수를 정의하는 방법과
interactive
과insert
의 용법을 알게 되면 우리는 부지런한 사람에서 게으른 사람으로 탈바꿈하는 경우가 많다.이전에 한동안 저는 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-world
및 povray-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/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Emacs Lisp 디버깅 팁미니 버퍼에 "잘못된 유형 인수"또는 이와 유사한 것이 있습니까? 스택 추적을 얻을 수 있습니까? 이상한 "잘못된 유형 인수"오류 또는 이전에 미니버퍼에 인쇄된 유사한 오류 중 하나를 받았을 것입니다. 대신 스택 추...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.