様々な表記
bipuuk の特徴的な点として、表記方法があります。
基本となるのは木構造ですが、それを十分に表現できる表記であれば何でも良いです。そのため、色々な表記方法を考えることができます。
パーサでは現状、入力手段として括弧表記と自然数表記を採用しています。
二分木表記
冒頭に挙げたような、二分木構造をそのまま描くものです。
変種として、葉(後述する自然数表記における 0
)を省略するかどうかが考えられます。
H木表記
白銀比の長方形に線を引いていくことでできる、フラクタル図形です。
同心円表記
中心から、放射状の直線と同心の円弧を繰り返していくものです。名前がついているものかどうかわかりませんでした。パーサで確認してください。
ポワンカレ円板表記
スライムさんの提案 によるものです。
深くなると極端に小さくなる、描画方法の理解に至らなかった、けぺけんが集合体恐怖症である、などの理由で描画器の作成は断念しました。
括弧表記
対応する括弧の列です。木の再帰的な構造を利用しており、以下の文法からなります。
<tree> := "" | "(" <tree> ")" <tree>
変種として括弧を前置するか後置するかが考えられますが、前置のほうが左再帰が無いので都合がいい気がします。
括弧の種類を変えるのもいいと思います。
後述する自然数表記と混在させることができます。
スラッシュ表記
スライムさんの提案によるものです。以下の文法からなります。
<tree> := <leaf> | "/" <tree> <tree>
<leaf> := 自然数表記など何らかのトークン
スラッシュじゃなくてもいいです。
括弧表記と本質的には同じですが、葉が何らかの形で明示される必要があります。また、葉が並んだときに区切りがわかる必要があります。
Haskell などの代数的データ構造の表し方に似ています。
自然数表記
木をナンバリングしていくことで、自然数と木を対応させる方法です。これに関しては決めることが色々あるので、別ページで解説します。
多分木との変換
多分木とは子を複数持つ木のことであり、“maybe a tree” という意味ではありません。
LISP のリスト構造のようにすると二分木と多分木は一対一に変換できるので、多分木を元に表記を考えることもできます。
Yuki さんの提案:多分木から自然数数列への単射