Lispをちょっと触ってみる

GP(遺伝的プログラミング)に興味がある。昔GPではよくLispが使われたという事で関数型言語になれるためにLispをさわってみる。
今回はmac leopoard 10.5.2で行う

インストール

参考URLそのまま
http://ujihisa.nowa.jp/entry/9df2c5a6ea

ただよくわからないが、1回目は失敗。同じコマンドをもう1度繰り返したら、インストール成功した。

$ sudo port clean clisp
--->  Cleaning clisp
$ sudo port install clisp
--->  Fetching clisp
--->  Verifying checksum(s) for clisp
--->  Extracting clisp
--->  Configuring clisp
--->  Building clisp with target all
--->  Staging clisp into destroot
--->  Installing clisp 2.43_0+darwin_9
--->  Activating clisp 2.43_0+darwin_9
--->  Cleaning clisp

さわってみる

参考URL
http://www.haun.org/kent/lisp1/1.html

起動
$ clisp
Break 2 [3]> 
足し算

以下式は「数値の345と654を加算する」という意味

Break 2 [3]> (+ 345 654)
999
変数設定

setq で変数設定できる。以下は変数hogeに345を設定。

Break 2 [3]> (setq hoge 345)
345
Break 2 [3]> hoge
345
if文

if 真偽 真の結果 偽の結果 という構文が基本らしい。
nil は偽になる、らしい。ということはnil以外は全て真?

Break 3 [4]> (if nil 11 24)
24
Break 3 [4]> (if 1 11 24)
11
関数定義

以下は絶対値を求める関数。
condを使用してまず (>= x 0) x を実行し、偽、の場合に t (- 0 x)) を実行。
ちなみにtは真(true)の意味。-1をかけてるだけだね、ここでは。

Break 3 [4]> (defun abc (x)
   (cond ((>= x 0) x)
         (t (- 0 x))))
ABC
Break 5 [6]> (abc -8)
8