argius note

プログラミング関連

教養としてLispを始めてみる

以前からちょっとずつ勉強していましたが、仕切り直して始めます。「教養として」というのは、特定の処理系についてではなく、言語としてのLispとして捉えようとしている、という意味です。
できれば、PerlとかRubyの代わりにちょっとしたスクリプトを書いたりするようになれると良いなと思っています。
教科書は今のところ「On Lisp」と次のエントリに挙げた「CommonLisp入門」、後はオンライン経由です。

処理系

日本で比較的使われていて、セットアップが楽だったものを適当に。最初はWindows側に用意しようと思ったんですが、GaucheLinux(それもFedora)の方が向いているようなので、すべてFedora6上にしました。

バージョンは動作確認で。

動作確認

名前を渡すとあいさつ文を返してくれる関数をそれぞれ作ってみました。

CLISP

インストールは、パッケージマネージャ(インストールの追加/削除)→開発→開発ツールのオプションパッケージから"clisp"を選択。
"clips"というのがリストに出てきて紛らわしい。

(defun greet (name)
  (format t "hello, ~A.~%" name))
(greet "argius")
$ clisp --version | head -n 1
GNU CLISP 2.41 (2006-10-13) (built on hammer2.fedora.redhat.com)
$ clisp greet.lisp
hello, argius.
$
Emacs-Lisp

同じくパッケージマネージャ→アプリケーション→エディタのオプションパッケージから"emacs"を選択。
最初はMeadowでやろうとしてた。
ここでは"lisp-interaction-mode"で評価してますが、関数定義だけ"*.el"ファイルに書いておいて、最後の評価だけinteractionモードで実行でも良い、のかな? さらにEmacsの拡張として使うには、"add-hook"などでイベントとして登録して使います(たぶん)。

;;; GNU Emacs 21.4.1

(defun greet (name)
  (message "hello, %s." name))
;;> greet

(greet "argius")
;;> "hello, argius."
gauche

本家サイトからソースをダウンロードし、makeでインストール。

(define (greet name)
  (format #t "hello, ~A.~%" name))
(greet "argius")
$ gosh -V 
Gauche scheme interpreter, version 0.8.12 [utf-8,pthreads]
$ gosh greet.scm
hello, argius.
$