74 lines
2.3 KiB
Markdown
74 lines
2.3 KiB
Markdown
#memo #mimium #programming-language
|
||
|
||
[[音楽プログラミング言語の形式化#mimium と 多段階計算]]
|
||
|
||
[[多段階計算]]を取り入れたい
|
||
|
||
とりあえず$W$ Calculusを自然に拡張してみる。
|
||
$W$ Calculusとmimiumの形式は似ているが、主に2つの違いがある。
|
||
|
||
1. $W$ Calculus はLinear-Time Invariant なシステムを想定しているため、基本演算は項の加算と、項と定数の乗算しか使えない。
|
||
2. $W$ Calculusでは関数が数をとって数を返すものしかない。つまり、関数やfeedの項を取ったり返すような高階関数は想定されていない。
|
||
|
||
問題になるのは後者の方だ。
|
||
|
||
## 型
|
||
|
||
|
||
|
||
n以下の自然数$I_n$ (ディレイのbounded access用)
|
||
|
||
$$
|
||
\begin{align}
|
||
\tau ::=&\quad R_a \quad & a \in \mathbb{N}\\
|
||
|&\quad I_n \quad &n \in \mathbb{N} \\
|
||
|&\quad \tau → \tau \quad &a,b \in \mathbb{N}\\
|
||
% |&\quad \langle \tau \rangle
|
||
\end{align}
|
||
$$
|
||
とりあえず1要素のタプルと普通のRは区別しないことにする
|
||
(そしてよく見るとこれは関数→関数のような高階関数を許してないんだな)
|
||
そうか高階関数を考えなければクロージャを考慮する必要もないものな
|
||
|
||
## 値
|
||
|
||
一旦タプルについては考えないことにしよう
|
||
|
||
$$
|
||
\begin{align}
|
||
v \; ::= & \quad R \\
|
||
| & \quad \lambda x:T.e \quad & [lambda]\\
|
||
|& \quad feed \; x.e \quad & [feed] \\
|
||
\end{align}
|
||
$$
|
||
## 項
|
||
|
||
項
|
||
|
||
$$
|
||
\begin{align}
|
||
e \; ::=& \quad x \quad x \in \mathbb{V} \quad & [value]\\
|
||
|& \quad \lambda x.e \quad & [lambda]\\
|
||
|& \quad fix \; x.e \quad & [fix]\\
|
||
|& \quad feed \; x.e \quad & [feed] \\
|
||
|& \quad e \; e \quad & [app]\\
|
||
%%|& \quad (e_1,e_2) \quad & [product]\\
|
||
%%|& \quad \pi_n e \quad n\in \mathbb{N},\; n>0 \quad & [project]\\
|
||
%%|& \quad \langle e \rangle \quad & [code] \\
|
||
%%|& \quad \textasciitilde e \quad & [escape]
|
||
\end{align}
|
||
$$
|
||
|
||
基本演算(Intrinsic)は直感に任せる
|
||
|
||
本来はfixの中でfeedを使ったり、feedの中でfixを使うとエラーだが、結局シンタックスレベルでは排除できないので型でエラーとして弾くことにする…?
|
||
いや値レベルでの切り分けは不可能なので、こうする
|
||
|
||
|
||
|
||
## 実例
|
||
|
||
```rust
|
||
fn
|
||
|
||
``` |