- mixfix演算子を持つ。
プログラミングしていてASTを扱いたいと思うことは多々あるわけですが、扱いづらいです。LispのS式やXML, JSON のようにプログラミング言語自体をデータとして扱えると嬉しい。Prologはエジンバラ記法と呼ばれる数式でプログラムします。CoqやAgdaで使われている演算子順位法の1種であるmixfix演算子を使うとより自由度が増します。 - 論理プログラミングができる。
操作的意味論や型付け規則をきれいに書けると言語を理解するのに便利だから論理プログラミングができるとよいです。 - 合併型(Untaged Union Type) がある。
TypeScriptやScala3にあるようなタグレスの合併型は作るのが極めて難しいですが、歴史的に積み上げられた理論で用いられる図式の型システムとなるので大いに意味があります。Elixirの型システムの完成が楽しみですね。 - 文法定義がそのまま代数的データ型の型定義にもなる。
数学的なBNFを書けば木文法に対する構文定義であるXML SchemaやJSON Schemaの定義のようになりかつ、代数的データ型による抽象構文木の型定義となる。具象構文=抽象構文になる。
これらの要件を満たす言語を作れば高レイヤーでの簡潔な言語理解が可能になるので最強な言語となります。
mixfixや論理プログラミング言語は作れるのですが合併型がとにかく難しい。
論理プログラミングの教科書を作らないと理解できる人が少ない状況が続くのが課題です。