これは、JHC Haskellコンパイラとそれが型クラスを実装する方法に関するこの記事に基づいて、非動的な非オブジェクト指向言語であっても、典型的な型ディスパッチメカニズムであると思います。この記事の意味するところは、ほとんどのHaskellコンパイラーが辞書を渡すことによって型クラス(型ディスパッチの一種)を実装しているということです。彼の代替案は直接の事例分析であり、表現の構成要素のタイプが何であるかを事前に知らないため、動的に型付けされた言語には適用できない可能性があります。一方、これは実行時にも拡張できません。
動的な非オブジェクト指向言語に関しては、Lisp/Scheme以外の多くの例を私は知りません。Common LispのCLOSは、Lispを適切なオブジェクト指向言語にし、動的ディスパッチと複数のディスパッチを提供します(実行時にジェネリックとメソッドを追加または削除でき、最初のパラメーター以外のタイプをキーオフできます)。これが通常どのように実装されるかはわかりませんが、通常、組み込み機能ではなくアドオン機能であることがわかります。これは、モンキーパッチャーになる予定のユーザーが利用できる機能を使用していることを意味します。特定のバージョンは速度の欠如で批判されています(CLISP、私は思いますが、彼らはこれを解決したかもしれません)。もちろん、このタイプの並列ディスパッチメカニズムをオブジェクト指向言語内に実装することもできます。おそらくその例をたくさん見つけることができます。
純粋関数型の永続マップまたは辞書を使用している場合は、継承されたマップのチェーンを必要とせずに、この機能を確実に実装できます。マップを「変更」すると、新しいマップが返されますが、古いマップへの既存の参照はすべて有効であり、古いバージョンとして表示されます。この機能を使用して言語を実装している場合は、type-> function mapをReaderモナドに配置し、インタプリタをラップすることで、言語を解釈できます。