まったり アイマス2

アイドルマスター2 超ライトユーザーのプレイ日記

4387. 論理型言語、続き

2024年03月20日 | 日記

 本日は春分の日で国民の祝日です。ペンディングになっているマイコンボードの半田付けを予定していましたが、純LISPが気になってしまって、そちらの調べごとをしています。
 wikipediaの日本語版に純LISPの項目があって、外部リンクにLISPの創設者のマッカーシーによる有名な論文があり、とても綺麗なpdfが得られます。それと、ごく初期の処理系、LISP Iのマニュアルと。どちらも1960年のものです。

 IBM 704という当時最先端のコンピュータが用いられていて、演算素子は真空管、36bitのワードマシンで、浮動小数点演算機構が付いているそうです。記憶素子は信頼性の高いコアメモリで、そのLISP Iのマニュアルには32Kワードと書いてありますから、現在で言うと144Kバイトです。
 私の経験で申し訳ありませんが、LISPは64KB程度のメモリではほんのお試ししかできず、128KB程度から気の利いた応用が出来ますから、非常にラッキーな開発状況だったと思います。さすがMITです。

 LISP IではできたばかりのLISPを手慣れたプログラマが素晴らしいシステムに仕上げていて、こちらもラッキーでした。科学技術用の計算機言語のFORTRANは莫大な費用で開発されたと聞きますから、LISPも本来ならば同程度の予算が必要だったはずですが、おそらく大学で開発されています。

 ただし、その2文献は、FORTRANやC言語しか知らない方だとかなりの難物に見えるはずです。Common LISPである程度のプログラムが書ける方には、慣れるまでちょっとかかるでしょうけど、何とか解読できると思います。

 数値計算が得意なようには見えないので、何に役立つのか、というと、記号処理でリスト処理ですから、コンパイラの構文解析のような感じの処理に役立ちます。論文ではエキスパートシステムの開発用に設計された、とあります。純LISPで書かれた純LISPインタプリタ、apply関数が万能チューリングマシンに相当する、と書いてありますから、計数型電子計算機の理論上の能力を知る近道になります。

 今のプログラマは構造化プログラミングに慣れているでしょうから、if文もwhile文も無い純LISPでどうやってプログラムを組むか、が最初の問題になります。論文の最後の方にフローチャートをLISPで動作させるには、の項目があります。
 cond形式が純LISPでは唯一の制御構造です。多重分岐の構文ですから、if文はすぐに分かるでしょう。繰り返しは再帰で行います。現在の処理系はまず間違いなく末尾再帰の最適化を実施しますから、(うまく書けば)機械語では単純なループになります。逐次実行は、condの条件節が逐次実行されるのを利用します。今のLISPではcondの実行節に複数の関数を並べることが出来て、もちろん逐次実行されますから、逐次実行用のprogn形式が必要な場面は少ないはずです。

 あと、数値計算はあるにはあるものの、配列がありません。代用にリストを使うことは出来ますが、何となく効率が良くない感じがします。近代LISPでは配列が用意されていると思います。まあ、普通はそんな場合にはFORTRANやC言語を使うでしょう。

コメント    この記事についてブログを書く
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 4386. 論理型言語 | トップ | 4388. 論理型言語、続き^2 »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

日記」カテゴリの最新記事