Concatenative/Applicative
昔々、FORTHという言語が好きでした。
なんでもスタックベースで、あたまの中で容易に実行モデルがつくれるのがきもちよかったのだと思われます。
FORTH(Forthって書くんだっけ)も生き残っていますが、派生した言語もいくつかあります。その中でも比較的最近で、なんだかリッチそうな言語Factorについて、ちょっと調べはじめました。
まず、Factorは「concatenative language」だと名乗っています。そりゃなんだ? Concatenative.orgというところに説明があったので読んでみました。
- applicable programming language
- 引数に関数を適用するタイプ。普通のプログラミング言語。C, Python, ML, Haskell, Java
- concatenative programming language
- single piece of dataを操作する関数を組み合わせることで評価する。この関数から関数へ渡されるデータは、スタックの形をしていることが多い。そしてconcatenative languageでは、この関数の組み立てはプログラムをつなげることでおこなわれる。Forth, Joy, PostScript, Cat, Factor
concatenativeとstack言語は違うの? → 似ているけど、違うクラスの言語。しかしほぼ同じと考えて良い、とのこと。しかしそういわれると違いがなんなのか気になるなあ。stack以外でも理論的には構成できる、ってとこかな?