見出し画像

関数型プログラミング事始め (11) Lisp処理系の導入

関数型プログラミングがはじめての方へ贈る入門の書
前節:Lispは関数型(続) 次節:Lispは前置形式
参考書:
・五味 弘「はじめてのLisp関数型プログラミング」技術評論社(2016)
・大山口 通夫、五味 弘「プログラミング言語論」コロナ社(2008)
・五味 弘「関数型プログラミングと数学(ITと数学)」技術評論社(2021)

Lispはマニアックな言語です。その昔、プログラミング言語にはLispとLisp以外の言語しかないと言われていました。それぐらい異質な言語です。でも堅苦しい宣言も不要で、その場で気楽に使えます。GCも装備され、JavaやPython、Rubyなどの言語に影響を与えた言語です。

2.2 Lisp事始め - Lisp処理系の導入

いよいよLispの言語仕様を紹介していきます。実際にLisp処理系を起動して使っていくことにします。Lisp処理系としてはISLispを取り上げます。

(1) ISO標準 ISLisp

ISLisp はISO(国際標準化機構、International Organization for Standardization)で制定されたプログラミング言語です。日本で仕様が検討され、日本発のプログラミング言語として、ISOで制定されました。これはプログラミング言語としては日本で最初でした。なおその後、RubyがISOで制定されました。

ISLispは当初Common LISP のサブセットとして検討され、Common LISP の基本的な言語仕様 を受け継ぎ、さらにSchemeのようにコンパクトな 仕様になっています。

例えば、Common Lispのオブジェクトシステム CLOSと比較して、コンパクトで実行効率の高いオブジェクトシステムILOSを採用しています。また言語仕様と処理系仕様の分離、Common Lispよりもデータ型のオブジェクトシステムへの統合を進めています。

(2) ISLisp処理系 OK! ISLisp

ISLisp処理系は各方面で開発されました。そこで筆者が開発に参加したISLispであるOK! ISLispを紹介します。

OK! ISLispサイト(筆者が管理をしています)
http://islisp.org/
http://islisp.com/

OK! ISLisp (Windows版)のダウンロードは以下になります。
http://islisp.org/jp/download-jp.html

ISLisp処理系だけでなく、関数検索システムやISLisp検証システムも有用なので、一緒にダウンロードしてください。

(3) ISLispの動作確認

ダウンロードしたISLisp.exeをダブルクリックしてください。ISLispが起動し、以下のようなウィンドウが表示されます。

> ISLisp Version 0.80 (1999/02/25)
>
ISLisp>

(+ 1 2 3)と打鍵してエンターキーを押下してみてください。
そうすると以下のように、1 + 2 + 3が計算され、値として6が返ります。

ISLisp>(+ 1 2 3)
6
ISLisp>

次に関数 FACT(階乗)を定義してみましょう。

ISLisp>(defun fact (n) (if (= n 0) 1 (* n (fact (- n 1)))))
FACT
ISLisp>

このFACT関数で100の階乗を計算してみましょう。

ISLisp>(fact 100)
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
ISLisp>

(4) (参考) Easy-ISLisp

笹川 賢一氏によるISLisp処理系 Easy-ISLispを紹介します。

GitHub - sasagawa888/eisl: ISLisp interpreter/compiler

このISLisp処理系はGNUのGuixパッケージとして採用されました。また並列化などの実装もされています。

(次回予告)Lisp超入門1

次回はOK! ISLisp処理系を使って、Lispの超入門の第1回を紹介する予定です。お楽しみに。

参考:プログラミング言語はどれがお得?(前編)|五味弘 (note.com)
参考:プログラミング言語はどれがお得?(後編)|五味弘 (note.com)

いいなと思ったら応援しよう!

五味弘 よろしければサポートをお願いします!