medley/miscの紹介 — #:g1

Posted 2014-06-18 16:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の170日目です。

medley/miscとはなにか

 medley/miscは、CMUのAIレポジトリに置かれているXerox Medleyで動くInterlisp-Dや、Xerox Common Lisp用のプログラム集です。

パッケージ情報

パッケージ名medley/misc
配布サイトPackage: lang/lisp/code/impdep/medley/

インストール方法

 特にパッケージシステム的なものもないのでファイルをloadします。

試してみる

 配布されているmisc.tgzの中身のうちソースコードは大体下記の通りです。

 拡張子があったりなかったりするのですが、ファイルの先頭に、

(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP")

(DEFINE-FILE-INFO READTABLE "XCL" PACKAGE "XCL")

のように書いてファイルでのLisp方言とリードテーブルを切り換えることができたようです。
前者は、Interlispのリードテーブルを用いてInterlispパッケージで読み込み、後者は、Xerox Common Lispのリードテーブルを用いてXCLパッケージで読み込みという具合。

 試してみた感じでは、InterlispのリードテーブルはCommon Lispの用にシンボルの大文字小文字を大文字に統一したりはしないようで、逆に大文字で書いてやる必要があるみたいです。
この辺りはファイルによってまちまちで、Interlisp-DではCommon Lispの環境も統合されていたため、Interlisp-Dの記述の中にCommon Lispの記述があったり、Common LispのリードテーブルでInterlispのコードを読み込んでみたりと、結構自由だったみたいです。

 あまりInterlispのコードも目にしないと思うので上記からgrepのコードを記載してみます。
記法の簡単な解説ですが、

というところです。

 スタイルの特徴としては、Interlisp-DはSmalltalkのようにイメージ指向なためファイルを編集するということがあまりありませんでした。(もちろん書き出すことは可能です。)
コードの整形や、日付等のコメントの挿入も自動でやってくれるため、そんな雰囲気がコードにも出ているかなと思います。

(FILECREATED "14-May-86 08:04:43" {DSK}<LISPFILES>GREP.;1 2502   

      changes to:  (FNS DOGREP)

previous date: " 5-Mar-86 12:15:18" {DANTE}<LISPNEW>LISPUSERS>GREP.;1)

(* Copyright (c) 1984, 1985, 1986 by Xerox Corporation. All rights reserved.)

(PRETTYCOMPRINT GREPCOMS)

(RPAQQ GREPCOMS ((FNS DOGREP GREP PHONE) (FILES BSEARCH) (INITVARS (PHONELISTFILES)))) (DEFINEQ

(DOGREP [LAMBDA (STR FILES) (* Newman "14-May-86 08:04")

(* * Originally coded by Larry Masinter.)

(* * No longer permanently modifies the DSPFONT when DSPFONT is not the same as the DEFAULTFONT. -DVN "14-May-86 08:03:59")

(if (LISTP FILES) then (for FILE in FILES do (DOGREP STRS FILE)) elseif (STRPOS "*" FILES) then (DOGREP STRS (DIRECTORY FILES NIL "*" "")) else (RESETLST (INFILE FILES) (RESETSAVE NIL (LIST (QUOTE CLOSEF?) (INPUT))) (RESETSAVE NIL (LIST (QUOTE DSPFONT) (DSPFONT))) (bind FOUND for STR inside STRS do (SETFILEPTR NIL 0) (bind POS while (SETQ POS (FFILEPOS STR NIL NIL NIL NIL NIL UPPERCASEARRAY)) do (OR FOUND (PROGN (PRINTOUT NIL T .FONT COMMENTFONT "(from " (INPUT) ")" .FONT DEFAULTFONT) (SETQ FOUND T))) (COPYCHARS NIL T (OR (BFILEPOS [CONSTANT (MKSTRING (CHARACTER (CHARCODE CR] (INPUT) 0 POS) 0) POS) (DSPFONT BOLDFONT) [COPYCHARS NIL T POS (SETQ POS (IPLUS POS (NCHARS STR] (DSPFONT DEFAULTFONT) (COPYCHARS NIL T POS (ADD1 (FILEPOS (CHARACTER (CHARCODE CR)) NIL POS])

(GREP (LAMBDA (STRS FILES) (* lmm " 1-Apr-85 15:27") (RESETLST (DOGREP STRS FILES))))

(PHONE [LAMBDA (NAME) (* lmm " 5-Mar-86 12:14") (GREP NAME (OR PHONELISTFILES (PROMPTFORWORD "Name of directory file: "]) ) (FILESLOAD BSEARCH)

(RPAQ? PHONELISTFILES ) (PUTPROPS GREP COPYRIGHT ("Xerox Corporation" 1984 1985 1986)) (DECLARE: DONTCOPY (FILEMAP (NIL (392 2368 (DOGREP 402 . 2000) (GREP 2002 . 2091) (PHONE 2093 . 2366))))) STOP

 さらについでに、上記のqeditというリストで作ったキューをGUIで操作できるという謎のプログラムを起動したスクリーンショットを載せてみます。

qedit-il

まとめ

 今回は、medley/miscを紹介してみました。
medley/miscは、かなり雑多なファイルの寄せ集めです。一個ずつ紹介すればネタも増えて嬉しいなと思いましたが、さすがに需要がないかと思い、まとめて紹介することにしました。
個別に紹介したいものがあれば、別途紹介記事を書くかもしれません。

comments powered by Disqus