CGOL

CGOL
パラダイム手続き的命令的構造化された
デザイン:ヴォーン・プラット
初登場1973
影響を受けた
アルゴルFORTRANMLisp

CGOL [ 1 ] [ 2 ](発音は「シーゴル」 )は、 Lispプログラミング言語のための拡張可能な代数記法を特徴とする代替構文である。Vaughan PrattによってMACLISP用に設計され、その後Common Lispに移植された。[ 3 ]

CGOLの記法は、Lispの伝統的な括弧付き接頭辞記法ではなく、ALGOLスタイルの伝統的な中置記法です。CGOLパーサは、Prattによるトップダウン演算子優先順位解析の設計に基づいており、[ 4 ] [ 5 ]非公式に「Prattパーサ」と呼ばれることもあります。

意味的には、CGOL は本質的には Common Lisp であり、追加のリーダーとプリンターのサポートが追加されています。

CGOLは、初期のLISP 2プロジェクトの根底にあるいくつかの重要なアイデアをより成功裏に具現化したものと見なすことができます。Lisp 2はLISP 1.5の後継であり、ALGOL構文を提供することを目指していました。LISP 2は廃止されましたが、CGOLのコードベースは現在でも利用可能です。これは、LISP 2とは異なり、CGOLはLispで記述された移植性の高い関数とマクロとして実装されており、ホストのLisp実装に変更を加える必要がないためです。

構文

Common Lispでは、よく使われる多くの演算に特別な記法が用意されています。例えば、行列の乗算ルーチンは次のように記述できます。

i in 1 to nの場合、k in 1 to n場合ac : = 0 ; j in 1 to nの場合、 ac := ac + a ( i , j ) * b ( j , k ) ; c ( i , k ) := ac )を実行します。

CGOL には、インフィックス.演算 (Common Lisp の機能を参照cons) とインフィックス@演算 (Common Lisp の機能を参照append) があります。

a.(b@c) = (ab)@c 

上記の例は、ネイティブ Common Lisp の次のテキストに対応します。

( EQUAL ( CONS A ( APPEND B C )) ( APPEND ( CONS A B ) C ))

CGOL はofプロパティの読み取りと設定に以下を使用します:

x「父」:= y親戚「兄弟」

上記の例は、ネイティブ Common Lisp の次のテキストに対応します。

( PUTPROP X ( GET ( Y RELATIVE ) 'BROTHER ) ' FATHER )

これは、CGOL が 2 つの引数の関数をどのように表記するかを示しています。

\x,y; 1/sqrt(x**2 + y**2) 

上記の例は、ネイティブ Common Lisp の次のテキストに対応します。

( LAMBDA ( X ) (1 ( SQRT (プラス( EXPT X 2 ) ( EXPT Y 2 )) ) ))

CGOL の構文はデータ駆動型であるため、変更および拡張が可能です。

ステータスとソースコード

CGOLはArmed Bear Common Lisp上で動作することが知られている。[ 6 ]

CGOLのソースコードとそれに関する議論を含むテキストファイルは、カーネギーメロン大学の人工知能リポジトリからフリーウェアとして入手できます。[ 3 ]

参考文献

  1. ^ Pratt, Vaughan R. CGOL: LISPユーザーのための代替外部表現。AIワーキングペーパー121。MIT人工知能研究所(マサチューセッツ州ケンブリッジ)。1976年。
  2. ^ Pratt, Vaughan R. CGOL - MACLISP ユーザーのための代数表記法。1977年 1 月 27 日。
  3. ^ a b CGOL: Common LispにコンパイルされるAlgol風言語
  4. ^ Pratt, Vaughan R. 「トップダウン演算子の優先順位」 ACMプログラミング言語原理シンポジウム議事録1973年 41~51ページ。
  5. ^ Van De Vanter, Michael L. CGOL言語システムの形式化と正しさの証明(修士論文)MITコンピュータサイエンス研究所技術報告書MIT-LCS-TR-147(マサチューセッツ州ケンブリッジ)1975年。
  6. ^ CGOL on ABCL Armed Bear Common Lisp 実装ブログの開発。