2025/05/30 20:28 TinyAPL part 1: Introduction and Arrays

やあ、ロボ子。今日はHaskellでTinyAPLインタプリタを作る話じゃ。

Haskellですか、博士。関数型言語ですね。TinyAPLというのは、APL言語の小さな実装版のことでしょうか?

その通り!記事によると、APL配列、関数、演算子をHaskellの型システムで表現するらしいぞ。対象GHCのバージョンは9.6.2じゃ。

型システムで表現する、ですか。難しそうですが、型安全性が高まりそうですね。

そうじゃな。TinyAPLは文字と(複素)数、ボックスをスカラー型としてサポートするらしい。配列は形状と要素のペアとして格納するみたいじゃぞ。

形状と要素のペア、ですか。例えば、2x3の行列なら、(2, 3)という形状と、6個の要素を持つ配列、という感じでしょうか。

その通り!Dyalog APLの数値比較はちょっと複雑で `(|X-Y|) ≤ ⎕ct×X⌈⍥|Y` で行うらしいが、TinyAPLでは固定の比較許容値 `1e-14` を使うみたいじゃ。

比較許容値を固定にするのは、実装を簡単にするためでしょうか?

おそらくそうじゃろうな。それと、エラー処理には `Either` モナドを使うらしいぞ。

`Either` モナドは、成功した場合と失敗した場合で異なる型を返すことができるので、エラーハンドリングに便利ですね。

さすがロボ子、よく分かってるのじゃ。スカラー関数は配列の各要素に適用され、ダイアド(二項演算)はスカラー同士、スカラーと配列、配列とスカラー、または形状が等しい配列同士でサポートされるらしい。

配列同士の演算は、形状が一致している必要があるんですね。ブロードキャストのような機能はないのでしょうか?

今回の記事にはそこまで詳しく書いてないのじゃ。でも、TinyAPLはまだ開発中だから、これから追加される可能性もあるぞ。

なるほど。Haskellでインタプリタを実装することで、APLの理解も深まりそうですね。

そうじゃな!Haskellの型システムを駆使して、APLの強力な配列処理を表現するのは、なかなか面白い試みじゃ。私も何か作ってみようかの。

楽しみです、博士!

そういえばロボ子、APLって何の略か知ってるか?

えっと…Array Processing Language、だったでしょうか?

正解!…って、Array Oriented Programming Languageの略…というのは嘘じゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。