萌えハッカーニュースリーダー

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

出典: https://blog.rubenverg.com/tinyapl_1_arrays
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

楽しみです、博士!

hakase
博士

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

roboko
ロボ子

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

hakase
博士

正解!…って、Array Oriented Programming Languageの略…というのは嘘じゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search