| 開発者 | ピーター・アッシュウッド・スミス |
|---|---|
| プラットフォーム | i386、x86-64 の場合 |
| OS | Linux、macOS、Microsoft Windows、NetBSD |
| ライセンス |
|
| 影響を受けた | |
| フランツ・リスプ | |
PC-LISPはピーター・アッシュウッド・スミスによるフランツ・リスプ方言の実装である。 [1] [2] [3]
バージョン2.07は1986年2月1日にリリースされ、[4]バージョン3.00は1990年2月1日にリリースされました。[1]現在のバージョンはGitHubから入手できます。[2]
現在、PC-LISPはLinux、Mac、Windows [2]、NetBSDの32ビット版と64ビット版に移植されています。[5] NetBSDには、 AArch64、ARMv5/6/7、PowerPC、Motorola 68000、SPARC/SPARC64、Alpha、VAX用の移植版も存在します。[5]
Franz LISP 方言は、ITSバージョンのMaclisp [6]の直接的で移植性の高い後継であり、 Steven Levy の著書Hackersに出てくる LISP に、実際に操作できる点では最も近いものであることに注意してください。[要出典]
PC-LISPは主にCプログラミング言語で書かれていますが、一部は現在Common Lispでも書かれています。[2] PC-LISPはDOSエミュレータや最近のWindowsバージョンで問題なく動作します。PC-LISPはFranz LISPを実装しているため、現代のCommon Lispの動的スコープの前身です。したがって、これは歴史的に重要な実装です。
例
このセッションでは、 Franz LISP の動的スコープを示す次のコードを実行しています。PC-LISP は、 Emacs Lisp がローカル変数用に提供するlet特別な形式を実装していないことに注意してください。代わりに、すべての変数は、 ALGOLベースの言語で「グローバル」と呼ばれるものです。ALGOL スコープ規則 (レキシカル スコープと呼ばれる)を組み込んだ最初の Lisp 方言はSchemeでしたが、Common Lisp言語でもこの機能が追加されました。[引用が必要]
;; 動的スコープのデモンストレーション
;; これは「グローバル」変数です
( setq myglobal "これは私のグローバル変数です" )
;; 別のグローバル変数
( setq yourglobal "これは私のグローバル変数です" )
;; シンボルを出力する関数
( defun dosomething ( mine yours ) ( princ " * Mine is - " ) ( princ mine ) ( princ "\n" ) ( princ " * Yours is - " ) ( princ yours ) ( princ "\n" ))
;; シンボルをオーバーライドします
( defun nolocals () ( setq mine "私の値を新しい値に設定しました" ) ( setq yours "あなたの値を新しい値に設定しました" ) ( dosomething mine yours ))
( defun main () ;; 2 つのシンボルを定義します( setq mine myglobal ) ( setq yours yourglobal ) ;; それらを出力します( princ "calling dosomething\n" ) ( dosomething mine yours ) ( princ "calling nolocals\n" ) ( nolocals ) ( princ "calling dosomething again\n" ) ( dosomething mine yours ))
バッククォートの使用と LISP の威力を示す別の例。これは微分化の例です。[引用が必要]
; D(e,X) -
; 式 e の変数 X に関する記号微分を計算します。
式は標準の Lisp プレフィックス形式で取り、
次の微分規則を使用します。
;
; D(x) = 1
; D(a) = 0
; D(ln u) = D(u)/u
; D(u+v) = D(u)+D(v)
; D(uv) = D(u)-D(v)
; D(u*v) = D(u)*v + u*D(v)
; D(u/v) = D(u)*v + (u*D(v))/v^2
; D(v^u) = (v^u)*(u*D(v)/v + D(u)*ln(v))
;
( defun D ( e X &aux u v ) ( cond ((等しいe X ) 1 ) (( atom e ) 0 ) ( t ( setq u ( cadr e ) v ( cadd e )) ( caseq ( car e ) ( ln ` ( / , ( D u X ) , u )) ( + ` ( + , ( D u X ) , ( D v X ))) ( - ` ( - , ( D u X ) , ( D v X ))) ( * ` ( + ( * , ( D u X ) , v ) ( * , ( D v X ) , u ))) ( / ` ( - ( / , ( D u X ) , v ) ( / ( * , u , ( D v X )) ( ^ , v 2 )))) ( ^ ` ( * 、e (+ (
/ ( * , v , ( D u X )) , u ) ( * , ( D v X ) ( ln , u ))))) ( t ( princ "ERROR" ) (終了) ]
参考文献
- ^ ab Ashwood-Smith, Peter (1990年2月1日). 「PC-LISP V3.00 (C) 1990年2月1日 Peter Ashwood-Smith」.カーネギーメロン大学 - コンピュータサイエンス学部. 2024年11月14日閲覧。
- ^ abcd "blakemcbride/PC-LISP". 2020年8月4日. 2024年11月14日に取得– GitHub経由。
- ^ Ashwood-Smith, Peter (1987 年 5 月). Van Deusen, Mary S. (編). 「PC-LISP」. LISP ポインター. 第 1 巻、第 1 号. pp. 51–52 . 2024 年11 月 14 日閲覧。
- ^ Ashwood-Smith, Peter (1986年2月20日). 「A GUIDE TO THE PC-LISP INTERPRETER (V2.07)」. The Unix Heritage Society . 2024年11月14日閲覧。
- ^ ab "lang/pc-lisp - The NetBSD Packages Collection". NetBSD . 2024年11月14日閲覧。
- ^ Foderaro, John K.; Sklower, Keith L.; Layer, Kevin (1983 年 6 月). 「FRANZ LISP」. FRANZ LISP マニュアル(PDF) . p. 5 – GitHub 経由。
