Lispは昔から存在するプログラミング言語です。初めて見る人にとっては括弧だらけで意味が分からない印象を与えるでしょうが、様々な機能が存在し後の言語に影響を与えました。

Lispという名前は「List Processor」から来ており、言語自体がリストの形になっています。LispにはCommon LispやSchema、Clojureといった派生言語が存在しておりそれぞれ少しずつ異なった仕様になっていますが、今回はCommon Lispを使用します。

コードの特徴

Common Lispのコードは丸括弧で囲まれており前置記法で表現します。「 1 + 2 + 3 」を計算したい場合は以下の様に記述します。

CL-USER> (+ 1 2 3) 6

いくつかサンプルを書いてみます。

; リストの表現 CL-USER> '(1 2 3) (1 2 3) ; xに2を代入する CL-USER> (setf x 2) 2 ; 条件文 CL-USER> (if (> x 1) 'ok 'ng) OK CL-USER> (if (> x 3) 'ok 'ng) NG

開発環境を整える

Common Lispで開発するにあたって環境を整えます。EmacsというエディタはLispと相性が良いエディタで、Emacs Lispという固有の言語を使ってエディタを拡張することができます。また、SLIMEという拡張機能を入れることによってEmacs上でLispを実行できるようになります。

まずはCommon Lispの処理系が必要です。現在多く使用されている処理系はSBCL（Steel Bank Common Lisp）というものです。今回はこちらを使用します。（http://www.sbcl.org/）

手動でインストールするといろいろと設定しなければならないので apt でインストールします。 apt でインストールすると既に環境設定されているのでインストール後すぐに使用することができます。 尚、環境はUbuntu16.04です。

# SBCLのインストール sudo apt install sbcl

Emacsとslimeもインストールします。

# EmacsとSLIMEのインストール sudo apt install emacs slime

これで必要なものが揃いました。

Emacsを起動して M-x slime とコマンドを打てばSLIMEが起動します。（ M-x は「Altキー」を押しながら「x」を押します。）



自動的に画面右半分がCommon Lispの実行環境になりました。

Hello World

文字を出力するプログラムを作成してみます。 Common Lispでは defun を使用して関数を定義します。

Hallo Worldを出力する関数は以下の様になります。

CL-USER> (defun hello () (format t "Hello World.")) HELLO

この関数を丸括弧でくるんで実行すると、

CL-USER> (hello) Hello World. NIL

出力できました。

Common LispはPHPやJavaScriptとは違ったコードの書き方をするのでとっつきにくい印象を受けてしまいます。しかし高階関数やマクロなどといった機能を使いこなせるようになるととても強力な言語となります。次回以降でCommon Lispを使ってどのようなことができるのか見ていきたいと思います。