理解を進めるために、 Emacs Lisp の諸々について、他のプログラミング言語と見比べてみます。
if
EXCELのワークシート関数 if に似ています。 EXCEL のは if(condition, then, else) ですけども Emacs Lisp のは
( if condition then-form else-forms… )
となっています。
前回より、再掲
(if (not untranslated-regions)
(error "Nothing previous msgid."))
このように else-forms... を省略することもできます。
Emacs Lisp (Lisp?) の if のハマりどころとして、 then-form は「1個だけ」ですが、 else-form は0個以上というのがあります。
(if condition (A) (B))
これをC言語で書くと
#include <stdio.h>
void main(int argc, char *argv[]);
void main(int argc, char *argv[])
{
if (argc > 1)
printf("exit args\n");
else {
printf("no args\n");
}
}
注意して欲しいのは then が 単文 ( { と } で囲まれてない) けど、 else は複文( { と } で囲まれている)という点です。
よって、
(if condition (A) (B) (C) (D) (E) (F))
はC言語でに書くと
#include <stdio.h>
void main(int argc, char *argv[]);
void main(int argc, char *argv[])
{
if (argc > 1)
printf("exit args\n");
else {
printf("no args\n");
printf("C\n");
printf("D\n");
printf("E\n");
printf("F\n");
}
}
となります。 どうしても then に複数の文を入れたい時は progn を使います。
(if (conditon) (progn (A) (B) (C)) (D) (E) (F))
なので、 C言語で { } を追加するみたいに if-else 文を
(if conditon
(
(A) (B) (C)
)
(D) (E) (F)
とやると Invalid-function エラーで怒られます。
今回はここまで