From d022bd79ec59a6f67c5c8681de3af9d2543f9eb3 Mon Sep 17 00:00:00 2001 From: "Tomoya Matsuura(MacBookPro)" Date: Mon, 28 Aug 2023 02:22:00 +0900 Subject: [PATCH] [obsidian] vault backup: 2023-08-28 02:22:00[ --- content/MacroML.md | 5 +++ content/MetaOCaml.md | 5 +++ content/Suwa Takashi.md | 5 +++ content/Untitled.md | 0 content/多段階計算.md | 2 + content/音楽プログラミング言語の形式化.md | 55 ++++++++++++++++++++--- 6 files changed, 65 insertions(+), 7 deletions(-) create mode 100644 content/MacroML.md create mode 100644 content/Suwa Takashi.md create mode 100644 content/Untitled.md diff --git a/content/MacroML.md b/content/MacroML.md new file mode 100644 index 00000000..72c0ccaf --- /dev/null +++ b/content/MacroML.md @@ -0,0 +1,5 @@ + + +[[Suwa Takashi]]さんによる実装 + +https://github.com/gfngfn/toy-macro-ml \ No newline at end of file diff --git a/content/MetaOCaml.md b/content/MetaOCaml.md index ef661de4..849183e6 100644 --- a/content/MetaOCaml.md +++ b/content/MetaOCaml.md @@ -1,2 +1,7 @@ #programming-language #software #tools +マニュアル + + + +https://okmij.org/ftp/tagless-final/cookbook.html#simple-staging \ No newline at end of file diff --git a/content/Suwa Takashi.md b/content/Suwa Takashi.md new file mode 100644 index 00000000..909756cf --- /dev/null +++ b/content/Suwa Takashi.md @@ -0,0 +1,5 @@ +#person + +[[SATySFi]]の作者 + +[[多段階計算]]の資料をたくさん残している \ No newline at end of file diff --git a/content/Untitled.md b/content/Untitled.md new file mode 100644 index 00000000..e69de29b diff --git a/content/多段階計算.md b/content/多段階計算.md index 1972f3b1..ab1d9a0a 100644 --- a/content/多段階計算.md +++ b/content/多段階計算.md @@ -19,6 +19,8 @@ http://www.cs.tsukuba.ac.jp/~kam/lecture/gairon2-2012/gairon2.pdf [MetaML](https://www.sciencedirect.com/science/article/pii/S0304397500000530) nextとprevに加えてrunを導入 +[[MacroML]] MetaMLをバックエンドにマクロとしてのわかりやすいシンタックス(`letmac`)とかを導入? + λ□: box(cross-stage persistence)を導入 λ○□:両方を統合 diff --git a/content/音楽プログラミング言語の形式化.md b/content/音楽プログラミング言語の形式化.md index fa3761f1..19b190f2 100644 --- a/content/音楽プログラミング言語の形式化.md +++ b/content/音楽プログラミング言語の形式化.md @@ -13,12 +13,11 @@ [[Coqの勉強]] -## mimiumと多段階計算 +## mimiumと[[多段階計算]] -こういうのが計算できなかった +こういうのが計算できなかった(要するにfixpointの中で`self`を使うと必要な`self`のサイズを確定できない) ```rust - fn filterbank(N,input,lowestfreq, margin,Q,filter){ if(N>0){ return filter(input,lowestfreq+N*margin,Q) @@ -27,15 +26,13 @@ fn filterbank(N,input,lowestfreq, margin,Q,filter){ return 0 } } - ``` 仮に多段階計算だとしてちょっと型を明示してみる まあ〜書きづらいよな ```rust - -fn gen_filterbank(N:int,lowestfreq:float, margin:float,Q:float,filter:float->float)-> float> { +fn gen_filterbank(N:int,lowestfreq:float, margin:float,Q:float,filter:(float,float,float)->float)-> <(float,float,float)->float> { // level:0 if(N>0){ < //level:1 @@ -52,7 +49,7 @@ fn gen_filterbank(N:int,lowestfreq:float, margin:float,Q:float,filter:float->flo } } -fn filterbank(input:float, N:int,lowestfreq:float, margin:float,Q:float,filter:float->float)-> float{ +fn filterbank(input:float, N:int,lowestfreq:float, margin:float,Q:float,filter:(float,float,float)->float)-> float{ ~(gen_filterbank(N,lowestfreq,margin,filter))(input) } ``` @@ -60,3 +57,47 @@ fn filterbank(input:float, N:int,lowestfreq:float, margin:float,Q:float,filter:f filter同士の足し算を`+`の`infix`でやりたいよねえ let多相じゃないよなあこれは +ていうかこれそもそも普通に高階関数じゃダメなんだろうか? + +```rust +fn gen_filterbank(N,lowestfreq, margin,Q,filter)->(float->float){ + |input|{ + if(N>0){ + return filter(input,lowestfreq+N*margin,Q) + + gen_filterbank(N-1,lowestfreq,margin,Q,filter)(input) + }else{ + return 0 + } + } +} +``` + +いやーこれでもif文が展開されるのは実行時だから意味ないのか + +--- + +あー、つまり + +- ステージ0ではfixpointが使えてfeedが使えない +- ステージ1ではfeedが使えてfixpointが使えない + +みたいな定義ができればいいんじゃなかろうか(というか、fixpointが使えるステージとfeedが使えるステージが交互に繰り返し出てくる、とかになればいけるのか?) + +ステージ0でfixpointを使ったものを評価しきってステージ1に行く時には再帰は有限回の計算に展開されていることになる・・・のでは? + +これ、同じように + +- ステージ0でn個の要素数のものとして評価されたリストはステージ1からn要素のタプルとして見える + +という前から考えていたこととも繋がるのでは? + + + +問題はそれをユーザーに意識させずに書かせる方法かあ、結局Faustはそれができているからこそ強いわけで(いや、Faustのパターンマッチは意味論破壊してるからしてるから結局2段階なのか) + +```rust +fn lowpass(input,fb){ + (1-fb)*input + fb*self +} +``` +