本文へスキップ

ホモイコニシティとは?

ほもいこにしてぃ

ホモイコニシティとは、プログラムコード自体がそのプログラムで扱うデータと同じ構造で表現される性質で、LispやClojureに代表される言語の特徴です。

ホモイコニシティ(Homoiconicity)は、「コードデータが同じ形式で表現される」という言語の性質を指します。「homoiconic」はギリシャ語の「homo(同じ)」と「icon(表現・シンボル)」に由来します。この性質を持つ言語では、プログラム自体がその言語のデータ構造として直接表現されており、プログラムがプログラムを読み書き・変換することが自然に行えます。

最も有名な例はLispとその方言(Common Lisp、Clojure、Schemeなど)です。Lispではコードは全て「S式(セクスプレッション)」と呼ばれるリスト構造で記述されます。たとえば (+ 1 2) は「関数+を引数1と2で呼び出す」というコードですが、同時にリストとしてのデータ構造でもあります。

ホモイコニシティの最大の恩恵はマクロの強力さです。コード自体がデータなので、マクロによってコードを変換・生成するプログラムを通常の関数と同じ文法で書けます。これにより言語の構文を自在に拡張でき、ドメイン固有言語(DSL)の構築が容易になります。

ホモイコニシティを持つ言語にはLisp系のほか、Prologなども挙げられます。Juliaも部分的にこの性質を持つとされています。一方、PythonやJavaなど多くの主流言語はホモイコニックではありませんが、ASTを操作するメタプログラミング機能で類似の表現力を提供しています。

使い方・例文

Clojureではコード自体がリストデータなので、マクロを使って「このリスト(コード)の要素を組み替えた新しいリスト(コード)を生成する」という操作が自然に記述でき、言語の機能を自分で拡張できます。

この用語をシェア

𝕏 でポスト LINE

最終更新:

関連用語