孤独にそっくり

開いている窓の前で立ち止まるな

実践Common Lispを読む 序章〜第2章

Jessica Slimed
SLIMEを頭から被る女性

こんにちは。
今回から『実践Common Lisp』を読んでいこうと思います。


こちらの記事
Common Lispの勉強をするには、あるいは情報を得るには | κeenのHappy Hacκing Blog
でも紹介されていますが、かなり有名な本です。
Land of Lispで文法を簡単にさらっているので、それなりにさくさく読めるのかなと期待しています。
すでにかなり忘れているところも多いですが、普段全くプログラミングをしてないので仕方ないですね…。

序章:なぜLispなのか?

ここでは作者の経歴やCommon Lispに対する考え、Lispの歴史、そしてこの本のターゲットとなる読者について書かれています。
そういえばLispの本というのは、常に「なぜLispか?なぜ他の言語ではないのか?」を問うている気がします。Lisp自体がプログラミングを始めたての人間が興味を持つ代物ではない(?)ものである上に、他の言語に比べると敷居が高く感じる(高いと思うけど)からそういった導入が必要なのかなと思いました。
でもよく考えたら「なぜPythonなのか?」みたいな文章も読んだことあったから気のせいっぽいです。僕がプログラミング言語の本を読んでないだけでした。

第2章 お気の済むまで:REPLツアー

本書ではEmacsとSLIMEをパッケージした「Lisp in a Box」を使います。
Common Lispの環境を構築しようとすると、よく目にするSLIMEを簡単にインストールできるらしいです。それからLispの処理系に関して書かれています。
しかし、Land of Lispではvimでぽちぽちコードを打ち込んでClispにコピペしていたローテクな僕はここで早速心を折られました。
まず起動ができない(泣)
仕方ないからぐぐったら
The Strange Storage: Lisp in a Box
こちらに書いてありました。(僕はLinuxを使っています。)

"Lispbox-0.7"なるファイルをホームディレクトリ(~/)やら他の好みの場所やらに展開. ここではホームディレクトリ直下に展開したこととする. LinuxのTerminal(ターミナル)を起動. cdコマンドを使って,フォルダ"Lispbox-0.7"内へと移動する.

cd ~/Lispbox-0.7

Lispbox-0.7直下にあるlispbox.shなるシェルスクリプトを,下記コマンドにて起動する.

./lispbox.sh

これでEmacsが起動し,少し待てばLispインタプリタも起動するはず.

わざわざシェルで起動するからめんどくさいです。
それにLisp in a Boxを使うにしても、Emacsの基本操作くらいわからないとダメっぽいことが書いてあります。
それで、とりあえずチュートリアルやってみました。うーん、Emacsわからん…。
僕みたいに脳の容量が著しく狭い人間にとって網羅的なチュートリアルは思考停止必至です。

そして、実はここで心が折れまくったため、自分で実行するのを放棄して読むだけにして、11章まで読んじゃいました。
なのでさっくり11章までまとめても良いのですが、それではしょうもないので、もう一度Emacsと仲良くなってから記事を書きたいと思います…。
早く次の記事を書けるように頑張ります…。
今回はここまでです。

まとめ

とりあえず、Emacsで心が折れた。

追記

さっそくドットインストールでEmacs講座を見ました。チュートリアルと同じようなことをやっているはずなのにとてもわかりやすかったです。
文章を読んで理解する、それを使えるようになるのが僕は苦手なのですが、実行画面を見ているとすっと腑に落ちるのはなぜでしょうね。
ドットインストール様様ということで、ちょっとEmacsと仲良くなれた気がします。

追記2

Emacsキーバインドはググればすぐ出てくるけどメモ
ドットインストールメモ from Emacs

終了
C-x C-c

*画面の見方
Buffer : タブ
Mode Line:いま開いているBufferの情報
Mini Buffer:コマンドの情報

*ファイル操作

Open:C-x C-f
Save:C-x C-s
Save as : C-x C-w
Exit:C-x C-c

*移動
左右
C-f(orward)
C-b(ack)
上下
C-p(revious)
C-n(ext)

行頭、行末
C-a
C-e(nd)

ファイルの先頭、最後
M-<
M->
;metaキー(ESC)は押してから時差がある

*編集
範囲指定開始:C-@
コピー:M-w
カット:C-w
貼り付け:C-y

行末までカット:C-k

削除:C-d
Undo:C-x u

*検索
C-s(earch)
C-r(everse)

置換
M-%

y:yes
n:no
!:all
q:quit

*Window

上下分割:C-x 2
左右分割: C-x 3
今いるウィンドウを閉じる: C-x 0
全部の分割を解除: C-x 1

ウィンドウ間を移動: C-x o

*Bufferリスト
C-x C-b

n,p:上下移動
d:delete flag
s:save flag
u:undo
x:run

*行数を表示
M-x linum-mode


*設定ファイル
~/.emacs.d/init.el

(show-paren-mode t)
(display-time)

C-x C-eで反映される

追記3

とりあえず
sudo apt install slimeして
ここらへん
最小限のCommon Lisp環境(Emacs+SLIME)の作成 - Qiita
モダンCommon Lisp第3回: SLIMEの使い方 基礎編 | ありえるえりあ
に書いてある通りにinit.el編集したら動いた
処理系は最初から入れてあったClisp
今後必要性を感じたら変えるつもり

slime起動するときは
M-x slime
シェル使うより楽ちん

追記4

SLIME

C-c C-q:slime-close-parens-at-pointコマンド(括弧を自動補完)
C-c C-c:コンパイル
C-x C-z or C-x b:REPLに戻る

終了
REPLで,を押してquit(sayonara)を入力
sayonaraだとすべてのBufferを閉じる

デバッガBufferはqで閉じる

SLIMEと仲良くなれたので先に進めます やったね(^^)/

追記5

Emacsの自動補完が欲しかったのでググった
Emacsパッケージ特集 - Qiita
package-archiveがよくわからなくて

(require 'auto-complete-config)
(ac-config-default)

をinit.elに書いても動かんなあと思ってググったら下に行き着いた
Emacs: How to Install Packages Using ELPA, MELPA

(when (>= emacs-major-version 24)
  (require 'package)
  (add-to-list
   'package-archives
   '("melpa" . "http://melpa.org/packages/")
   t)
  (package-initialize))

これでmelpaが追加されてauto-completeが手に入りました
と思ったらSLIMEはac-slimeを入れないとダメだったので入れました

ひとまず環境構築おしまいです