APLはキーボード入力と画面出力がアレなのでしばらく不遇だったが、 UnicodeにAPL文字が入ってからちょっとはましになったかもしれない、と思い、 APLの方言であるA+の学習を開始してみた。
文字コードの壁
APL諸言語と同じく、 A+もASCIIコードの非文字領域をAPL文字とみなして評価しているので、 UnicodeとA+文字を相互に変換してやる必要がある。
Emacsから使う
A+をEmacsのUnicode入力から使うにはUnicAPLのapl.elが恐らく必須なので、いれておくこと。
これと、sf:openAPL付属のapl-mode.elを組み合わせて、 aplus-modeをでっちあげてみた。
これをいれて、.emacsに、
(setq auto-mode-alist (append '(("\\.\\+\\'" . aplus-mode)) auto-mode-alist)) (autoload 'aplus-mode "aplus-mode" "edit A+ script." t nil)
を加えることにより、拡張子.+でaplus-modeで開くようになる。 あとは、M-x set-input-method apl-asciiでapl.elのAPL入力モードに入れるようになるので、 プログラミング環境はほぼ完成。まだ対話入力モードがないけど我慢。
それ以外での入力
uim-aplも作ってみた。WebページにAPLのコードを貼りたいときには便利。
uim.elでもascii-apl-direct-uim, ascii-apl-unic-uimで入力できるようにのすけさんに対応していただいた。 深夜(というか朝)にわざわざ面倒をおかけします。感謝。
プログラムを書いてみる
⍝ ここはコメント "hello,world." sys.exit 0
たぶん、A+に関しては次のエントリから意味不明な文字が飛び交います。 A+にはASCIIで入力するモードもあるのだけど、こっちは使いません。 APLだもんね。
追記:
- 一部の文字がUnicAPLの変換テーブルにないので(⍨等)、 A+で解釈できないまま保存されることがある。 テーブルに対応表を追加するだけでいいのだが、なかなか大変だ。
- 出力される文字もAPLコードなので、フィルタが必要となる。たとえば、"{minus}1"は"−1"となって出力される("-1"ではないので注意)。
- uim-apl.scmが誤ったURLを指してので訂正した。