DSL / Literal List


DSL

リテラルリスト

一言要約

リテラルリスト(Literal List)は言語式を表現する。

要約

仕組み

リテラルリスト(Literal List)は、リストデータの形の構造に組み立てられた言語である。多くの言語は、直接の構文をリテラルリスト(Literal List)に提供する。最も明らかななのがLispである。

Lisp
:(first second third)
Ruby
[first, second, third]

Rubyは、上記のように似ているが、きれいなものでは全くない。

これらの構造は、通常の入れ子になる一覧となることを許され、実際には完全なLISPプログラムでは入れ子のリストであることが見受けられる。

リテラルリスト(Literal List)は、いくつかの関数内での呼び出しでよく使用される。親の関数では、リストから要素を取り出し、いくつかの方法でそれらを加工する。

主流のCベースの言語は、便利な入れ子のリストの構文が提供されていない。リテラルの配列{1,2,3}となるが、よくそれらの中で定数や文字は、唯一許される。

一般的な構文とは違って、いくつかの記号と式が許される。

多くの問題を切り抜ける方法としては、可変引数の関数を使うことである。

companions(jo, saraJane, leela)厳密な型の言語で、これらの要素は、可変引数の呼び出しで動作するために全て同じ型であることが必要とされる。

いつ使うか

リテラルリスト(Literal List)は、いくつかの要素の中で入れ子にされたときによく利用する。 ほとんどの場合に、(parent ::= child * )のように論理的な文法で、関数は呼び出される。多くの場合 リストの中のアイテムは、関数が自分自身を呼び出す。

:リテラルリスト(Literal List)は、よくネスト関数(Nested Function)を実行できる。

もし、ネスト関数(Nested Function)のための例を見て、リテラルリスト(Literal List)は、よく可変引数の関数として存在していることが見受けられるであろう。(その例は、特に厳密な型付けが存在するかについて組み合わせのいくつかの問題について議論されている。 )

たとえホスト言語が、リテラルリスト(Literal List)のためにうまれつきの構文を持っていたとしても、よく可変引数の関数を利用したほうがよいであろう。

リストは、関数呼び出しとして利用される。私は、companions([jo, saraJane, leela]) より、 companions(jo, saraJane, leela) を好む。

リテラルリスト(Literal List)を唯一利用することで、いくつかのDSLを作ることが可能である。

本質的には、Lispの構成を真似することになる。

自然な方法としては、LISPで書くことが明らかである。しかし、本当に、自然に他の式を組み合わせる他の言語では、面白い課題ではない。


ファウラーへのフィードバック

担当者のつぶやき

みんなの突っ込み