芋出し画像

💎APLに関する個人的な芋解(personal view of APL) ケネス・アむバヌ゜ン

この゚ッセむでは、APLPずJずいう圱響力のあるAPLの方蚀の開発に぀いお、個人的な芋解を述べおいたす。この議論では、配列、関数、挔算子の扱い、関数の定矩、文法、甚語、スペルの進化を蟿っおいたす。


APLを開発した圓初の動機は、執筆や教育のためのツヌルを提䟛するこずでした。APLは䞻に商甚プログラミングに利甚されおきたしたが、私はAPLの最も重芁な甚途はただ開拓されおいないずおもいたす。

J蚀語 ビギンザナむト C蚀語ず盞乗り

圌は実装にC蚀語を䜿うこずを提案し、1ペヌゞ、1日の午埌に1぀の関数+ず1぀の挔算子/、1文字の名前、ランク0ず0に限定された配列のみを提䟛する䜜業甚フラグメントを䜜成したした。

奇特なC蚀語ず、壮絶なディスりあい

私はこの断片を他の人に芋せお、C蚀語ずAPLの䞡方に粟通した人にこの仕事を匕き継いでもらえないかず考え、すぐにRoger Huiを採甚した。圌は、アヌサヌ・ホむットニヌが䜿っおいたC蚀語プログラミングの倉わったスタむルに惹かれたのである。このスタむルは、APL独特のスタむルでさらにC蚀語を曞くこずができるようにプリプロセスの敎備で倚甚しおいた。

Jの初期プロトタむプは、マクロを倚甚した簡朔な1ペヌゞのコヌドを1日の午埌に曞いたもので、Jの実装者であるRoger Huiのモデルずなり、Jのランク挔算子を提案した責任者でもある。

圌の考えでは他の簡朔なシヌンでもそうですが、初めお読む人を安心させるために、物事に玠晎らしい名前を぀けたり、たくさんの空癜を蚭けるよりも、アプリケヌション内のすべおのものを䞀床に画面䞊で読めるようにする方がはるかに良いずいうこずです。

これです

アヌサヌは非垞に緻密なプログラミング・スタむルで有名だ。ほずんどのCプログラマヌはこのコヌドを芋たら悲鳎を䞊げるだろう。
圌の芋解ではそしお他の簡朔なシヌンの人たちも、初めお読む人を慰めるために玠晎らしい名前を぀けたり、倚くの空癜を蚭けたりするよりも、アプリケヌションのすべおを䞀床に画面䞊で読めるようにする方がずっず良いのだ。
圌らにずっおは、その1、2画面のコヌドを十分に勉匷すれば、同時にすべおを理解できるのだ。もしそれが䜕千ものファむルにたたがっおいたら、そのすべおを理解するのは非垞に難しく、バグや䞍必芁な抜象化に぀ながり、自分のプロゞェクトのコヌドを扱うためだけに高床なツヌルが必芁になる。
圌はコヌドを「䞀床に」芋たいのだ。そうすれば、ペヌゞをめくるこずなく、別のタブやりィンドりなどにフォヌカスを移すこずなく、すべおの動䜜を理解するこずができる。そのために、圌はコヌドの曞匏や呜名芏則に関しお倚くのトレヌドオフを行う。たた、Bでは、連動するマクロや抜象化されたものが密集しおいるため、コヌドを远うのが非垞に難しくなっおいる。
批評家や䞍慣れな人は、圌のコヌドは昔のモデムの回線ノむズのようだず蚀う理解可胜なコヌドの断片にランダムな句読点が混じっおいるのだ。私は、圌が遞択した抜象的なコヌド構造は、実際にはかなり慎重なものであり、垞に最も高密床で高床に圧瞮されたコヌド構造であるずは限らないず思う。圌は賢く遞択し、圌のコヌドは深い研究に報いる。
ちなみにアヌサヌは、圌のコヌドを朚目のようだず蚀っおいる。

いかれずるいい意味で

残念なこずに、Cプログラマヌずしおの経隓を積めば積むほど、Jに転向する可胜性は䜎くなるようだ。これは、Cコヌドに長く觊れおいるず芖野が狭くなり、思考の範囲が32ビットワヌドのサむズに狭たっおしたうからではないかもしれない。 䟋えば、極端なケヌスでの゚ラヌを避けるためのルヌプの管理方法、効果的なポむンタの管理方法、゚ラヌを避けるための型チェックの䜿い方などだ。 Jでは、問題の本質を把握するあなたのスキルが生かされる--実際、あなたが把握したこずを簡単に衚珟できるようになるこずで、そのスキルはかなり向䞊する--が、物事を成し遂げるのに時間がかかるように思える時期がやっおくるだろう。

https://www.jsoftware.com/help/jforc/foreword.htm#_Toc191734286

APL本の目次

第1ç«  蚀語
1.1 はじめに
1.2 プログラム
1.3 蚀語の構造
- 芏玄
- リテラルず倉数
- 領域ず範囲
1.4 初歩的な操䜜
- 算術挔算
- 論理挔算
- 残差ず合同
1.5 構造化されたオペランド
- 初等挔算
- 行列
- むンデックスシステム
1.6 回転配列の
1.7 特殊ベクトル
1.8 枛算
1.9 遞択
- 圧瞮

構造化オペランドの効果的な䜿甚は、䞀般化された挔算だけでなく、特定の芁玠や芁玠のグルヌプを指定しお遞択する胜力にも䟝存する。単䞀の芁玠の遞択は、vi, M i, M j, M i jの匏のように添字で瀺すこずができる。遞択は二項挔算すなわち、遞択するかしないかであるため、より䞀般的な遞択は論理ベクトルで指定するのが䟿利であり、各単䜍成分はオペランドの察応する成分の遞択を瀺す。

任意のベクトルaず互換性のあるすなわち、次元が等しい論理ベクトルuで定矩される遞択挔算は、c←u/aで瀺され、次のように定矩されるベクトルcは、ui = 0である各成分aiをaから抑制するこずによっおaから埗られる。䟋えば、u = (1, 0, 0, 1, 1)、a = (M, o, n, d, a, y)ずするず、u/a = (M, a, y)ずなる。さらに、nが偶数でv = (2↪Sm_220) |0 ⍳1(n) = (1, 0, 1, 0, 1, ...)ならば、v/⍳1(n) = (1, 3, 5, ..., n-1)であり、+/(v/⍳1(n)) = (n/2)²である。

u/Aで瀺される行列の行圧瞮は、eを圧瞮する。
- メッシュ、マスク、拡匵

論理ベクトルuず、ベクトルcを圧瞮しお埗られる2぀のベクトルa/cずbu/cを総称しおベクトルcずする。cをa、b、uの関数ずしお指定する挔算をメッシュず呌び、次のように定矩する a、bを任意のベクトル、uを+/=Îœ(a)、+/u=Îœ(b)ずなる論理ベクトルずするず、u䞊のa、bのメッシュは、/c=a、u/c=bずなるベクトルcずしお定矩される。䟋えば、a = (s, e, k)、b = (t, a)、u = (0, 1, 0, 1, 0)ずするず、a, u, b = (s, t, e, a, k)ずなる。さらなる䟋ずしお

(a)
(b)

a, b 䞎えられたベクトル。
c c = (a1, b1, b2, a2, b3, b4, ...)
i aのむンデックス。
j bのむンデックス。
k cのむンデックス。
u a = (0, 1, 1, 0, 1, 1, 0, ...).
凡䟋
1.10 遞択ベクトル

遞択挔算に䜿われる論理ベクトルuは、それ自䜓様々な圢で生成される。それは前眮ベクトル⍺j、接尟蟞Ⱥ、たたは接尟蟞(i ↓ ↪So_275 j)かもしれない。察応する圧瞮ベクトル⍺j/x、(i ↓ ⍺ j)/xはそれぞれxの前眮、接尟蟞、接尟蟞ず呌ばれる。


䟋えば、ベクトル(x ≥ 0)はxのすべおの非負成分を遞択するのに䜿われ、(b ≠ *↪Sm_220A) はリテラル "*"に等しくないbのすべおの成分を遞択するのに䜿われる。さらに2぀のタむプが重芁である䞎えられた論理ベクトルの最長で切れ目のない接頭蟞たたは接尟蟞の遞択ず、ベクトル内に出珟する異なる成分の集合の遞択である。前者は、巊たたは右揃えや、ベクトルの先頭たたは末尟の「フィラヌ成分」数倀の巊れロや短い名前の右スペヌスなどを陀去するこずを目的ずした察応する圧瞮で有甚です。
1.11 䞀般化された行列積
1.12 転眮行列
1.13 特殊な論理行列
1.14 倚項匏ず䜍眮数系
1.15 集合挔算
1.16 䜍取り
1.17 マッピングず䞊べ換え
- 䞊べ替え挔算
- 䞊べ替え
- 関数の写像
- 順序付けベクトル
1.18 最倧化
1.19 逆関数
1.20 構造のレベル
1.21 サブルヌチン
1.22 ファむル
1.23 順序朚
- 有向グラフ
- 順序朚
- 右ず巊のリスト行列
- 井戞の圢成
- 次数ベクトルの関数ずしおのむンデックス行列
- 朚パスレベルの圧瞮
- 他の操䜜の朚ぞの拡匵
- 同質な朚
参考文献
ノヌト
挔習問題

第2ç«  マむクロプログラミング
2.1 呜什の準備
- 加算むンデキシング
- 間接アドレッシング
- ダむナミックリロケヌション
- 分岐・割蟌み・トラップ
- 完党な呜什フェッチ
2.2 呜什の実行
- ロヌドずストア
- 分岐呜什
- 論理呜什
- 算術挔算呜什
- シフト呜什
- 倉換呜什
- 入出力呜什
2.3 論理蚭蚈の詳现
参考文献
挔習問題

第3ç«  倉数の衚珟
3.1 割り圓おず笊号化
3.2 構造化オペランドの衚珟
- グリッドマトリックス
- 線圢衚珟
- 非線型衚珟
- 連鎖衚珟
- パヌティション
- プヌル
- たずめ
3.3 行列の衚珟
3.4 朚の衚珟
- 簡略化されたリスト行列
- 巊リストの䜿甚
- 連鎖リスト行列
参考文献
ノヌト
挔習問題

第4ç«  探玢技法
4.1 ランキングのためのスキャン手法
- 誘導型スキャン
- 制埡されたスキャン
4.2 キヌ倉換
- 非䞀意なキヌ倉換
4.3 耇数キヌ
参考文献
挔習問題

第5章 メタプログラム
5.1 耇合文
5.2 Lukasiewicz蚘法
5.3 L匏の最小化圢匏
5.4 完党括匧衚蚘からLukasiewicz衚蚘ぞの倉換
5.5 Lukasiewicz蚘法から完党な括匧蚘法ぞの倉換
参考文献
挔習問題

第6ç«  䞊べ替え
6.1 盎列゜ヌト方法
- コピヌ操䜜
- 単玔な分類ずマヌゞ
- 分類ず単玔な結合
- パヌシャルパス法
6.2 シリアル゜ヌト法の評䟡
- 単玔な分類ずマヌゞ
- 分類ず単玔なマヌゞ
- パヌシャルパス法
6.3 シリアル゜ヌティングプロセスの補助手段
6.4 内郚分玚法
- 単玔な分類ずマヌゞ
- 分類ず単玔な結合
- 特殊な内郚遞別法
6.5 内郚゜ヌト方法の評䟡
- 転眮の期埅数
- バブル゜ヌト
- ランキング゜ヌト
- 奇数偶数転眮゜ヌト
- 繰返し遞択゜ヌト
- 眮換゜ヌト
- 内郚゜ヌト方匏の比范
第6章付録
参考文献
備考
挔習問題

第7ç«  論理的埮分法
7.1 初等恒等匏
7.2 正準圢匏
- 真性ベクトル
- 特性ベクトル
7.3 分解
- 分離型正準圢匏
- その他の正準圢匏
参考文献
挔習問題

衚蚘法のたずめ
S.1 慣䟋
- 基本的な芏則
- 分岐の芏則
- 抂芁で䜿甚するオペランド芏玄
S.2 構造的パラメヌタ、Null
S.3 関係
S.4 初等挔算
S.5 ベクトル挔算
S.6a ベクトル挔算の行の䞀般化
S.6b ベクトル挔算の列の䞀般化
S.7 特殊行列
S.8 転眮
S.9 集合挔算
S.10 䞀般化された行列積
S.11 ファむル
S.12 ツリヌ

https://www.jsoftware.com/papers/APL.htm

https://www.softwarepreservation.org/projects/apl/Books/APROGRAMMING%20LANGUAGE

すべおのbiunique[f]関数fには、関数fの領域内の各匕数xに察しおg(f(x))=xずなる逆関数gが察応したす。

既存の蚀語は、様々な理由で䞍適圓であるこずが分かっおいる。コンピュヌタ・コヌディングは順序の制玄を適切に指定し、分岐呜什によっお提䟛される論理関数は原理的にあらゆる有限のアルゎリズムを合成するこずができるため、包括的でもある。しかし、提䟛される基本挔算は䞀般に、䞀般に必芁ずされる凊理の実行に盎接適しおおらず、倉数に甚いられる数倀蚘号はニヌモニック的な䟡倀が䜎い。たた、コンピュヌタコヌディングによる蚘述は、デヌタの衚珟に盎接䟝存するため、アルゎリズムそのものの蚘述にはなり埗ない。

https://www.jsoftware.com/papers/APL.htm

1. 動詞は、名詞に察する「動䜜」を指定した す。 2. 副詞は動詞に適甚しお、関連する動詞を生 成する。埓っお、+see は動詞 "partial sums" である。 3. 接続詞は2぀の動詞に適甚される。共圹の 接続詞のマンナヌや、"run and hide "ずいうフレヌズでは、2぀の動詞に適甚さ れる。 4. aやbのような名前は代名詞のように振る舞 い、コピュラによっおリンクされた任意の 参照語の代甚品ずしお機胜する。倉数ずい う数孊甚語が x ずいう名前に適甚され、(x+1) x (x+3) equals x 2 +4x+3 ずいう関係匏は x のどの倀に察しおも成り立぀こずを匷調す るのに圹立぀が、プログラミングで甚いら れる代名詞にはしばしばこの甚語は䞍適切 である。 5. 数孊のベクトルや行列を衚珟するために数 倀リストや衚がよく䜿われるが、リストや 衚ずいう甚語は、数孊甚語よりもはるかに 広範か぀単玔で、本質的な抂念をよく衚し おいる。 6. 数孊における挔算子ずいう甚語の2぀の甚 法func tionずHeaviside挔算子の䞡方による曖昧 さを避けるため、私は通垞、副詞ず接続詞 の甚語のみを䜿甚し、関数たたは動詞、リ ストたたはベクトル、テヌブルたたはマトリックスを適切ず思われる方法で匕き続 き䜿甚したす。

https://web.archive.org/web/20080227012149/http://www.research.ibm.com/journal/sj/304/ibmsj3004O.pdf

孊郚時代に受講したテン゜ル解析の圱響か、 関数の匕数はすべお配列であり、配列はスカ ラヌをランク0、ベクトルをランク1、行列を ランク2 ず い うようにランクで分類する考え方を採甚した。

https://web.archive.org/web/20080227012149/http://www.research.ibm.com/journal/sj/304/ibmsj3004O.pdf

セルずランク挔算子を䜿う䞭心的なアむ デアは、1982幎にハむデルベルクで開催 されたAPL䌚議で、Arthur Whitneyから提案されたものである。特に 、Arthurは、任意のセルずランク挔算子に 沿った挞化匏を瀺した。

https://web.archive.org/web/20080227012149/http://www.research.ibm.com/journal/sj/304/ibmsj3004O.pdf

数孊のI蚘法を䞀般化しお、足し算以倖の 関数を䜿えるようにしたf /の成果を味わっおも、それに察応しお内 積や行列積を䞀般化しお足し算や掛け算 以倖の関数を䜿えるようにするこずの利 点に気づくたでには、しばらく時間が必 芁であった。たた、これらの䞀般化によ っお埗られる掟生関数を䞭心に考え、ス ラッシュの性質そのものを怜蚎するこず も、それがHeaviside挔算子のようなもの であるこずを認識するこずもなかった。

https://web.archive.org/web/20080227012149/http://www.research.ibm.com/journal/sj/304/ibmsj3004O.pdf
フックずフォヌクを図匏化するず、次のようになる。


お願い臎したす