インターネット&PC120%活用:PC活用編

Lispの入手

1 Lispの入手
1) Lispとは
Lispは人工知能言語とよばれ、他のプログラミング言語とはかなり趣を異にします。
その昔(CP/M時代)はLispというとかなり高価なもので、なかなか入手して使える人はいなかった
と思いますが、今はフリーのLispがたくさんあります。
Lispは、非常に方言が多い言語として知られており、多くのフリーLispもそれぞれに異なっています。

Free Compiler」にLispのサイトを揚げてありますので、いろいろ調べてみてください。

BASIC,C,FORTRANなどとはまったく別物の言語です。全然今までと違った言語をかじってみたい
という人は、いちどLispを触ってみることをおすすめします。

2) XLISP
フリーLispとしては代表的なものです。割とオーソドックスなLisp?ではないでしょうか。
XLISPにもいろんなバージョンがありますが、おじさんはWindows上で使えるXLISPのバージョンで
xl304winというものを使っています。解凍するだけで使えます。
Free Compiler」に揚げたLispのサイトからダウンロードできます。

3) yoolw
Tanaka Yuji氏作のWindowsで使えるLispです。CommonLispに近い仕様です。XLISPとも近い仕様
です。これも解凍するだけで使えてお手軽です。
Vectorからダウンロードできるはずですので、
探して下さい。

4) その他
フリーのLispはその他たくさんあります。


2 XLISP(xl304win)を使って見る
解凍するだけで使えます。Binフォルダにある、xlwin32.exeをクリックすると、起動して以下のような
画面が立ち上がります。



> 
を表示して入力待ち状態になっていますので、続けてコマンド(関数)を記述すればO.K.です。
ちなみにLispはほとんどがインタプリタです。このXLISPもインタプリタです。

まず、足し算をしてみましょう。 7+9 は以下のように記述します。
> (+ 7 9)
(関数 引数 引数 ・・ ・・) という形式で記述します。
+ は加算の関数です。

Lispでは、全て( )で囲んで関数を記述します。
( ) 内の各要素は空白で区切ります。 区切り記号としてカンマ , は使いませんので注意して下さい。

Lispの最大?の特色はListの扱いにあります。Listとは要素を( ) で囲んだものです。
上記画面の2個めのコマンド(関数)にある (list 1 2 3)が1,2,3 という要素をもったListです。
この2個めのコマンド(関数)にある、car はListの先頭の要素を返す関数です。
cdr はListの先頭の要素を省いたListを返す関数です。
従って
> (car (cdr(list 1 2 3)))
は、Listの2番目の要素である 2を返します。
この手のList処理は、他の言語、例えばBasicなどでは非常にプログラムしにくい処理です。
Lispの得意技の分野といえるでしょう。


3個目以下のコマンド(関数)は、関数を定義した別の外部ファイル(拡張子.lsp)を読み込んでから
実行したものです。メニューバーの[File]-[Open/load]で外部ファイルを読み込みます。
ここで読み込んだ関数は以下の通りです。

(defun first(a b c) (car (list a b c)))

(defun plusf(a b c) (setq x (car (list a b c))) (+ x 1))

(defun plusf&e(a b c) (setq z (list a b c)) (setq x (car z)) (setq y (car(cdr(cdr z)))) (+ x y))

(defun plusf&e2(a b c) (+ a c))

defun で関数(ユーザー定義関数)を定義します。
(defun 関数名(引数) (実行部))
という形式になります。

定義された関数は、(関数名 引数 ・・ ・・) という形で、既に組み込まれている組み込み関数と同じ
形式で使うことができます。

ユーザー定義関数の定義の形式は各Lispにより割と方言の多いところです。他のLispでは若干違ったり
します。

上記のユーザー定義関数の中で使っている setq は
(setq a x)
と記述すると、他の言語でいうところの a = x (代入)になります。
やっていることは単純なので、ご自分で考えてみて下さい。
なお、plusf&e , plusf&e2 は同じ結果を得ます。


3 Yoolw
Yoolwも解凍するだけで、Windows上で使えます。
Yoolw.exeをクリックすると、以下の画面が立ち上がります。

Yoolwでは画面が2段構成になっています。上段は、実行結果の表示画面で、下段の1行の部分に
コマンド(関数)を記述します。

ユーザー定義関数は、以下のように記述するパターンが一般的です。(ユーザー定義関数のタイプにより異なる)
(de '関数名 ' (lambda(引数) (実行部)))

1個目の関数は加算です。
2個目のユーザー定義関数 s はXlispでやったのと同じです。2番目の要素を取り出します。

Yoolwでも、メニューバーの[File]-[Open File]でユーザー定義関数を記述した外部ファイルを読み込むことが
できます。Yoolwでは、拡張子 .yo のファイルです。
上記では、maxp_x_y (x,yの大きい方を返す)、 seco (Listの2番目の要素を返す)というユーザー定義関数
を記述したファイルを読み込みました。
読み込んだ関数は以下の通りです。

(de 'maxp_x_y '(lambda(x y)(prog()
           (print "MAX")
           (cond((greaterp x y) x)(t y))           
)))


(de 'seco '(lambda(x y z)(car (cdr(list x y z)))))

cond はBASICでいうところの if と同じ働きをします。
(cond (条件式1 処理1) (条件式2 処理2))
という記述になります。
条件式で (greaterp x y) は x>y ならばです。
t は真(=true)ということで、条件式として使うと、常に成立することになります。
この場合、Basicでいうところの else と同等の働きをすることになります。
cond の行をBasicで記述すると
if x > y then print x else print y
と同等になります。


4 終わりに
ほんのさわりだけですが、Lispの紹介をしてみました。いかがでしたでしょうか。
BASIC、C、FORTRANなどとは全然別の言語体系です。まったく違った言語で遊んでみたいという人は
Lispに手を出してみたら、はまるかもしれません。

 

TopPage


 

inserted by FC2 system