EmacsでLispの覚え直し(その2)

Emacs再入門で、これまでEmacs内にある情報と感のみで学習してきましたが、そろそろ限界のようです。Emacsの言語仕様を確認しようとEmacs内のヘルプを辿ったら、外部リンクに行き着いてしまいました。
まあ、言語仕様ってのはたいてい膨大なものなので仕方ないとは思います。

Emacs Lispのリファレンスページへのアクセス方法です。
(f1キー2回、Ctrl + f)
14-006まで

ネット上で覚えてしまうと、ど忘れした時に、結局検索のお世話になってしまうので、なるべくEmacs内の情報のみで学習を進めようとは思っていましたが、一度ネットを頼ってしまうと、もういろいろと探したくなります。
そして、気になったのがリストの書き方。

(list 10 20 30)

この書き方しか知りませんでした。または、クォートで短縮する

'(10 20 30)

この書き方。この2つしか使えませんでした。

そして、ネットで見つけて、意味が分からなかったのがこの書き方。

(quote (10 20 30))

文法は合ってるのだろうと思います。quoteは、’ですから。Lispの熟練者は、きっと使いこなせるのでしょう。
しかし再入門中のLispを熟知していない私としては、見過ごせません。

Lispの、

()で括る
先頭の要素に式を置く

を守る。って前提が揺らいでしまいます。
前提が揺らいだまま覚えると、応用が効かなくなるどころか、基礎まで危うくなります。

なので、
‘(10 20 30) は、
(list 10 20 03) の省略形であって、

(quote (10 20 30)) を、意味しているのではない。
と思ってます。

もう一つ、ネットで見つけたもので、インタラクティブにLispが書けるツールがありました。
ielmです。

Emacsを使ってれば知らない人はいないのでしょうけど、このツールって、Emacs内でどうやって探していいか分かりませんでした。
GUIからも辿れないし、ヘルプでも見つからない。
なぜEmacs内で見つからないのか。まあ、そんなに重要なポジションにあるツールではないということかもしれません。

では、ielmを使って、Lisp学習します。
M-x ielm (Alt + x、ielm)

*** Welcome to IELM ***  Type (describe-mode) for help.
ELISP>
ELISP> (list 10 20 30)
(10 20 30)

ELISP> 
ELISP> '(10 20 30)
(10 20 30)

ELISP> 
ELISP> (setq aaa '(10 20 30))
(10 20 30)

ELISP> 

リストの最初の要素を取得してみます。

ELISP> (first aaa)
*** Eval error ***  Symbol's function definition is void: first
ELISP> 

ん〜。だめらしい。firstは定義されていないんですね。
仕方ないので、古きあしき書き方のcarを使います。

ELISP> (car aaa)
10 (#o12, #xa, ?\C-j)
ELISP> 

Lispを使っていれば、carは基本だろうけど、これもいつまでたってもcarってところが気にいらないところ。
最初の要素を取得する関数名がなぜ、carなのか。車じゃないか。
こうやって立腹しながら覚えると忘れません。
さらにcarを使ってみます。

ELISP> (car (car aaa))
*** Eval error ***  Wrong type argument: listp, 10
ELISP> 

carしたものをcarしただけなのですが、エラーになりました。
carはリストの最初の要素を取得するので、
つまり、carが取得した値は、リストではない、ってことになります。
そうすると、carの結果をlistにしてさらにcarすることはできるでしょうか。

ELISP> (car (list (car aaa)))
10 (#o12, #xa, ?\C-j)
ELISP> 

できました。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA