このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

レコードの構文と意味論

構文

レコード ::= '{' 文並び '}'
文並び ::= 空 | 文並び ';' 文
文 ::= 空文 | 宣言文 | 定義文
宣言文 ::= 種 名前 プロファイル
定義文 ::= 種 名前 ':=' 項

種付きレコードは、

種付きレコード ::= 種 レコード

種〈区分 | division〉を列挙:

  1. type
  2. function
  3. value (マクロ)
  4. signature
  5. transformer
  6. structure (マクロ)

type, function valueをレイヤー0、signature, transformer, structureをレイヤー1とする。valueとstructureはマクロなので、本質的なのは type, function, signature, transformerの4つだけ。

  • type結合子: *, -^
  • function結合子: ;, ・, ()
  • signature結合子: #, #<, ren[ ]{}
  • transformer結合子: [ ], >>, << <,

指標と変換子を文脈なしで書くときは種接頭辞〈タグ | マーカー〉が必要だが、文脈があるときは省略してよい。

種付きのレコードの正確な構文は、

  • signature レコード
  • transformer : 指標レコード項1 -> 指標レコード項2 レコード
  • 指標レコード項1には空か'?'が許される。
  • 指標レコード項2には'?'が許される。空は許さない。
  • 指標レコード項1が空のとき、structure : 指標レコード項2 レコード

文の略記: まず、同時宣言文

  • 種 名前カンマ区切り並び プロファイル

複文は、複数の文を1個の文とみなす。ただし、同種の文しかまとめられない。

  • types 種なし文のセミコロン区切り並び .
  • values 種なし文のセミコロン区切り並び .
  • functions 種なし文のセミコロン区切り並び .

文頭にprivateを付けると、名前が隠蔽される。

どんなレコードに対しても、そのソース指標とターゲット指標を計算できる。指標レコードの場合、ソース指標もターゲット指標もその指標自身になる。

[追記]
語感の問題で、structureよりinstanceのほうがいいようだ。

ここでのラベル オブジェクト指向 関数型
signature interface class, signature
instance class instance, structure
transformer アダプター functor

無名のsignature, transformer, instance の書き方

signature { ...指標レコード }

transformer : Σ -> Δ { ...変換子レコード }
transformer : Σ -> ? { ...混合レコード }
transformer : ? -> ? { ...混合レコード }

instance : Σ { ...インスタンスレコード }
instance : ? { ...インスタンスレコード }

以上の基本の書き方、レコードの部分に指標項、変換子項、インスタンス項を書いてよい。項の定義は:

  1. 条件に適合したレコードは項である。
  2. 既に宣言された名前は項である。
  3. 項のラムダ抽象は項である。
  4. 項を結合子で組み合わせたものは項である。結合子には適用演算子もある。
  5. 項のラムダ抽象は項である。
  6. 以上のものだけが項である。

signature/transformer(instanceはtransformer)ともに、プロファイルを持つ。そのプロファイルは、ソースとターゲットに関するものと、パラメータ化に関するもとがあるので、

  • パラメータ指標 => ソース指標 -> ターゲット指標
  • (ソース指標 -> ターゲット指標) <= パラメータ指標

の形を持つ。パラメータ指標の具体化には<か>を使い、ソース指標の具体化には>>か<<を使う。このなかで、< は省略可能で併置で代用できる。

檜山常用 今回
図式順結合 ; >>
反図式順結合 \circ <<
図式順適用 . >
反図式順適用 ・, ◁ <

[/追記]