ディスカッション (10件)
Dyalog APLの習得を目指すエンジニアへ。このユニークで強力な配列指向言語の深淵を覗いてみませんか?圧倒的な記述量と計算効率を実現するDyalog APLの世界観を解説します。
これがJupyter Notebook形式に対応したのは嬉しいね。元の本もAPLの入門書としてはかなり良いものだったし。APLは記号の扱いに慣れる(マッスルメモリーを作る)のが学習曲線の半分みたいな言語だから、インタラクティブに試せるのはめちゃくちゃ大きいよ。
APLを使う予定は全くないけど、暇な時用にブックマークしておくには最高だね。
これを学習することにどれだけのリターンがあるのか、正直かなり気になる。
APLを学ぶことは、Matlabみたいに厳密に配列ベースではない言語を書く上でどれくらい役立つんだろう?
最近Dyalog APLを少し触ってみて、Dyalog APLを評価するためのemacsモード[1]を書いたよ。gnu-apl-mode[2]から必要な機能だけを抽出するのにClaudeを使ったんだけど、かなり良い体験だった。本格的にAPLに取り組みたいから、Kattis[3]の問題をたくさん解いてみるつもり。LLM時代の言語学習法として、オンラインのコードジャッジサイトで簡単な問題から始めて、LLMと協力して解法を考えたり解説してもらったりするスタイルは本当に気に入ってる。手っ取り早くコーディングを始められるし、ドーパミンが出るし、反復練習もできて、徐々に難易度を上げながら言語のいろんな機能に慣れていくには最適だよ。
[1] https://github.com/ebanner/dyalog-mode (https://github.com/ebanner/dyalog-mode)
[2] https://github.com/lokedhs/gnu-apl-mode (https://github.com/lokedhs/gnu-apl-mode)
APLみたいにニッチで、難解プログラミング言語に近いものがOSSでもなく、商用利用も気軽にできないエンタープライズライセンスの下にあるっていうのは、いつも奇妙に感じるんだよね。
それはそうと、以前APLのプログラムをNumPyに翻訳して遊んだことがある。ある時点でAPLの本質みたいなのが分かってきて、後悔なく次に進めるようになるよ。結局のところ、APLのコードの大半は線形代数演算をこねくり回して(非効率なことも多い)簡潔に書くというパズルみたいなものだからね。もしOSSで簡潔な記法を持ち、パズル解きじゃなくて思考をクリアにするために脳を書き換えてくれるような言語を探してるなら、TLA+がおすすめ。
追記:APLがどんなものか一目で知りたいならこれを見てみて:
APLコード:
(2=+⌿0=∘.|⍨⍳N)/⍳N <- これがNまでの素数を計算するAPLの「Hello world」的なコード。
等価なNUMPYコード:
R = np.arange(1, N + 1) # ⍳N
divides = (R[None, :] % R[:, None]) == 0 # 0=∘.|⍨⍳N
divisor_counts = divides.sum(axis=0) # +⌿
result = R[divisor_counts == 2] # (2=...)/⍳N
見ての通り、この有名な素数生成器はエラトステネスの篩ですらなくて、単純なN^2の約数カウント計算に過ぎないんだよ。
現代向けのより簡潔なAPL入門はこちら:https://xpqz.github.io/learnapl (https://xpqz.github.io/learnapl)
(著者)
現代において商用コンパイラの居場所はないね。無料(かつオープンソース)にして、IDEだけを有償にすればよかったんだ。いっそのことGCCやLLVMに組み込むのがベストだよ。