Compare commits
No commits in common. "f0de7daafe722e610807284d9c6281718ae60ba0" and "62f8ea927e193604db1890f4857c7dc6959c5522" have entirely different histories.
f0de7daafe
...
62f8ea927e
@ -4,6 +4,7 @@ date: "2023-10-29T18:14:14+0900"
|
|||||||
#programming #music #sound
|
#programming #music #sound
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[Algorithmic symphonies from one line of code -- how and why?(2011)](http://countercomplex.blogspot.com/2011/10/algorithmic-symphonies-from-one-line-of.html)
|
[Algorithmic symphonies from one line of code -- how and why?(2011)](http://countercomplex.blogspot.com/2011/10/algorithmic-symphonies-from-one-line-of.html)
|
||||||
|
|
||||||
|
|
||||||
@ -17,7 +18,7 @@ Bytebeatは2011年に[[viznut]]がYoutube上の動画で公開し、自身のブ
|
|||||||
|
|
||||||
[HTML5 Bytebeat](https://greggman.com/downloads/examples/html5bytebeat/html5bytebeat.html)
|
[HTML5 Bytebeat](https://greggman.com/downloads/examples/html5bytebeat/html5bytebeat.html)
|
||||||
|
|
||||||
[Bytebeat Composer](https://bytebeat.ficial.net/)
|
[Bytebeat Composer](https://sarpnt.github.io/bytebeat-composer)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -31,12 +32,13 @@ Bytebeatは元々次のようなC言語のプログラムで作られてた。
|
|||||||
main(t){for(;;t++)putchar(((t<<1)^((t<<1)+(t>>7)&t>>12))|t>>(4-(1^7&(t>>19)))|t>>7);}
|
main(t){for(;;t++)putchar(((t<<1)^((t<<1)+(t>>7)&t>>12))|t>>(4-(1^7&(t>>19)))|t>>7);}
|
||||||
```
|
```
|
||||||
|
|
||||||
このC言語のコードは極限まで圧縮されているのでもうちょっと丁寧に書くとこうなります(大昔のCコンパイラでない限りエラーで落とされる)。
|
このC言語のコードは極限まで圧縮されているのでもうちょっと丁寧に書くとこうなります。
|
||||||
|
|
||||||
```c
|
```c
|
||||||
#include <stdio.h>
|
int main(int t){
|
||||||
int main(){
|
for(;;t++){
|
||||||
for(int t=0;;t++) putchar(((t<<1)^((t<<1)+(t>>7)&t>>12))|t>>(4-(1^7&(t>>19)))|t>>7);
|
putchar(((t<<1)^((t<<1)+(t>>7)&t>>12))|t>>(4-(1^7&(t>>19)))|t>>7);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -45,7 +47,7 @@ for(int t=0;;t++) putchar(((t<<1)^((t<<1)+(t>>7)&t>>12))|t>>(4-(1^7&(t>>19)))|t>
|
|||||||
macOSでやろうとするなら、`ffmpeg`に付属する`ffplay`で次のようなコードで書ける
|
macOSでやろうとするなら、`ffmpeg`に付属する`ffplay`で次のようなコードで書ける
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
program | ffplay -f u8 -i pipe:0 -ar 8k -ch_layout mono
|
program | ffplay -f u8 -i pipe:0 -ar 44k -ac 1
|
||||||
```
|
```
|
||||||
|
|
||||||
どうせならC言語使わずにデータを生成したいが、シェルスクリプトで直接バイナリを扱うのは死ぬほどだるい(`printf`コマンドや`bc`であれこれすれば不可能でもないが、結局ファイルを一度経由しないと厳しい)
|
どうせならC言語使わずにデータを生成したいが、シェルスクリプトで直接バイナリを扱うのは死ぬほどだるい(`printf`コマンドや`bc`であれこれすれば不可能でもないが、結局ファイルを一度経由しないと厳しい)
|
||||||
|
@ -8,51 +8,3 @@ date: 2024-10-20 12:02
|
|||||||
Stateのこととupvalueを両方処理しなくてはならない
|
Stateのこととupvalueを両方処理しなくてはならない
|
||||||
|
|
||||||
StateSize計算とUpvalue計算の両方をtraitとして切り出す方がいいのかな
|
StateSize計算とUpvalue計算の両方をtraitとして切り出す方がいいのかな
|
||||||
|
|
||||||
|
|
||||||
## 値
|
|
||||||
|
|
||||||
$$
|
|
||||||
\begin{align}
|
|
||||||
v \; ::= & \quad R \\
|
|
||||||
| & (\lambda x:\tau.e, [\Gamma, x:e],StateStorage(p,Vec)) \quad & [Closure]\\
|
|
||||||
\end{align}
|
|
||||||
$$
|
|
||||||
|
|
||||||
$$
|
|
||||||
\begin{align}
|
|
||||||
e \; ::=& \quad x \quad x \in \mathbb{V} \quad & [value]\\
|
|
||||||
|& \quad \lambda x.e \quad & [lambda]\\
|
|
||||||
|& \quad e \; e \quad & [app(global,stateful)]\\
|
|
||||||
|& \quad appcls \; e \; e \quad & [appclosure]\\
|
|
||||||
|& \quad fix \; x.e \quad & [fixpoint]\\
|
|
||||||
|& \quad getstate \; e \; I_n \; I_s \quad & [feed] \\
|
|
||||||
|& \quad delay \; e \; e & [delay]\\
|
|
||||||
\end{align}
|
|
||||||
$$
|
|
||||||
|
|
||||||
結局[[The w-calculus a synchronous framework for the verified modelling of digital signal processing algorithms|W計算]]のStaged Interpreterと変わらんかもな
|
|
||||||
|
|
||||||
そうすると型付けの時点でクロージャ相当の項とグローバル関数適用の項は分かれることになる?エフェクトとして考えるのが妥当なのかな
|
|
||||||
|
|
||||||
## 型
|
|
||||||
|
|
||||||
$$
|
|
||||||
\begin{align}
|
|
||||||
\tau ::=&\quad R_a \quad & a \in \mathbb{N}\\
|
|
||||||
|&\quad I_n \quad &n \in \mathbb{N} \\\
|
|
||||||
|&\quad \tau → \tau \quad \\
|
|
||||||
% |&\quad \langle \tau \rangle
|
|
||||||
\end{align}
|
|
||||||
$$
|
|
||||||
|
|
||||||
## コンパイル
|
|
||||||
|
|
||||||
```ocaml
|
|
||||||
let compiler = fun e -> match e with
|
|
||||||
Id(x) ->
|
|
||||||
| App(e1,e2)->
|
|
||||||
| Feed(x,e) ->
|
|
||||||
|
|
||||||
|
|
||||||
```
|
|
@ -1 +1 @@
|
|||||||
Subproject commit f679bc01e2a7010b362c024e813af6a650621ae2
|
Subproject commit 60d5f4a80f7bc2ad2dda5cb366b3fc84c8dac7ea
|
Loading…
Reference in New Issue
Block a user