Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@y2q_actionman

Allegro Common Lisp の excl パッケージをチラ見する

More than 5 years have passed since last update.

これは、 Lisp Advent Calendar 2013 の記事の一つとして書かれました。


ストーリー

  1. Allegro Common Lisp でしっかり動作するLispコードがあった。
  2. なんとなく、Armed Bear Common Lisp で動くかどうか試した。
  3. あれ、エラーが出る
  4. あらら、気づかない内に、Allegro Common Lisp 専用の excl パッケージ を使ってたのか。

ということがあり、このexclパッケージの存在が気になっていました。今回は、その内容をざっと見て、「へーそんなのあるのかー」と思ったものをちょっと紹介してみようと思っております。

どんなものが入っているのか

excl パッケージは、ANSI Common Lisp に対する Allegro 固有の拡張で、固有のパッケージに含まれないものが収められているようです。以下のようなものが入っています。

  • stream 拡張 :: いわゆる gray stream など
  • 国際化 :: ストリームに対する external-format 指定の詳細や、localeなど
  • コンパイラ :: コンパイラに対する詳細な指定や、FASLの扱いなど
  • OSとのインターフェース :: ファイル操作や、シグナルハンドリングなど
  • 同期機構 :: アトミック操作や、ロックなど
  • 正規表現
  • GC :: GCの起動や、オブジェクトへの ファイナライザの登録 など

ほか、 exit なども excl パッケージの内容です。

気になった便利(?)オペレータ

while, until

その名の通り、与えた条件が真/偽である間、指定した処理を実行し続けるというもの。先に書いた、「Allegro Common Lisp から別処理系への移植」でうっかり使ってしまっていたのがこれでした。 loop マクロで十分なのですが、平易に書けるのでつい使ってしまっていたのかも。

prefixp

第一引数のシーケンスが、第二引数のシーケンスのプリフィックスになってるかどうかを見る。ときどきこういうものを loop を駆使して手書きしている気がします。

if*

一番びっくりしたのがこれ。ifthenelse, elseif といったものを導入し、cond よりも括弧の少ない多方向分岐構文を実現しています。また、 thenret という、「条件が真だったらとにかくその値を返す」なんてものも含まれてます。

defadvice と fwrapper

emacs lisp にもある defadvice と、改良版の def-fwrapper 。Common Lisp なら、 defmethod された関数に対してはそうとう融通がきくのですが、普通の defun された関数に対してはそうはいきません。 結局、安易に setf をぶち込んだりするのですが。。。これからはこっちを使おうかと。

まとめ

Allegro Common Lisp は、 そのドキュメントの目次が90項目以上 あったりします。その入り口をちらっと覗いてみただけのお粗末な記事ですが、なかなか面白いものを見つけられたなと思ってます。

余談

Allegro Common Lisp には、80年代のオブジェクトシステムである Flavors も、含まれているみたいです。
ちょっと面白そう。

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?