LoginSignup
6
6

More than 5 years have passed since last update.

CommonLisp + Quicklisp + cl-project で自作モジュール作成

Posted at

何の記事?

CommonLispで自作モジュールを作ります。
モジュールのロードにQuicklispと、
モジュールの雛型を作るためにcl-projectを使用します。

Quicklispで自作モジュールを使用するという記事をみて、
すごく助かった+cl-project使うと楽かも?とおもったので書いてみました。

基本的にはcl-project使って雛形を作ることを楽にするということと、
Quicklispあたりの使い方の説明も含めてかいてみたいと思います。

対象とする人

  • SBCL(Steel Bank Common Lisp)でLisp始めたはいいけどモジュールのつくり方がわからん。
  • なんかASDFとかいうの出てきたけどよくわからん。

って人たち

環境

  • OS : Windows 10 x64
  • 処理系 : Steel Bank Common Lisp 1.2.15

準備

※SBCLがインストール済みであることを前提とします。

Quicklispのインストール

QuicklispのWebサイトからquicklisp.lispをダウンロードしてきて、
REPLを起動して以下を実行します。

quicklisp.lispをロードします。

(load "quicklisp.lisp")

Quicklispをインストールします。

(quicklisp-quickstart:install)

REPL起動時にquicklispが自動でロードされるようにします。

(ql:add-to-init-file)

モジュール作成

雛形の作成とQuicklispへの登録

cl-projectをQuicklispを使ってロードします。

(ql:quickload :cl-project)

カレントディレクトリのmylibにモジュールの雛形を作成します。

(cl-project:make-project #p"mylib/")

Quicklispをインストールすると C:\Users[ユーザ名]\quicklisp\local-projectsという
ディレクトリができていると思います、ここに先ほど作成した雛形をmylibフォルダごと移動します。
なかったらql:*quicklisp-home*をREPLで評価してQuicklispがどこを見に行くか
調べましょう。

※ここからは元ネタの記事とほぼ同じです
モジュールをlocal-projectsに登録します。

(ql:register-local-projects)

ここまででQuicklispから自作モジュールがロードできるようになっているはずです。
一度REPLを再起動して試してみましょう。

(ql:quickload :mylib)

以下のような感じになればOKです。

* (ql:quickload :mylib)
To load "mylib":
  Load 1 ASDF system:
    mylib
; Loading "mylib"

(:MYLIB)

使ってみる

作成した雛形のmylib/srcにmylib.lispというファイルがあります。
ここにユーザ定義関数など書いていきます。

mylib/src/mylib.lisp
(in-package :cl-user)
(defpackage mylib
  (:use :cl))
(in-package :mylib)

;; blah blah blah.

以下のように書き換えます。
fooという関数を定義してexportして(mylib:foo)という形で
呼び出せるようにしています。

mylib/src/mylib.lisp
(in-package :cl-user)
(defpackage mylib
  (:use :cl)
  (:export :foo))
(in-package :mylib)

(defun foo ()
  (format t "foo called ~%")) 

モジュールを再読み込みして

(ql:quickload :mylib)

定義した関数を呼び出します。

(mylib:foo)

以下のようになればOKです。

* (ql:quickload :mylib)
To load "mylib":
  Load 1 ASDF system:
    mylib
; Loading "mylib"
[package mylib]
(:MYLIB)
* (mylib:foo)
foo called
NIL
*

まとめ

Lisp関連の日本語の情報ってのはとても少ないので、
あたりまえに知られているだろうと思うようなことでも他の人には
役に立つことがあります。(特に私みたいなはじめたばっかの人間にはね)

Lispの記事がたくさん増えてLisp使う人が増えてくれるといいなぁ

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6