[obsidian] vault backup: 2023-08-28 02:22:00[
This commit is contained in:
parent
c029028b6e
commit
cb6810dd7c
5
content/MacroML.md
Normal file
5
content/MacroML.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
|
||||||
|
[[Suwa Takashi]]さんによる実装
|
||||||
|
|
||||||
|
https://github.com/gfngfn/toy-macro-ml
|
@ -1,2 +1,7 @@
|
|||||||
#programming-language #software #tools
|
#programming-language #software #tools
|
||||||
|
|
||||||
|
マニュアル
|
||||||
|
|
||||||
|
<https://okmij.org/ftp/ML/MetaOCaml.html>
|
||||||
|
|
||||||
|
https://okmij.org/ftp/tagless-final/cookbook.html#simple-staging
|
5
content/Suwa Takashi.md
Normal file
5
content/Suwa Takashi.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
#person
|
||||||
|
|
||||||
|
[[SATySFi]]の作者
|
||||||
|
|
||||||
|
[[多段階計算]]の資料をたくさん残している
|
0
content/Untitled.md
Normal file
0
content/Untitled.md
Normal file
@ -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を導入
|
[MetaML](https://www.sciencedirect.com/science/article/pii/S0304397500000530) nextとprevに加えてrunを導入
|
||||||
|
|
||||||
|
[[MacroML]] MetaMLをバックエンドにマクロとしてのわかりやすいシンタックス(`letmac`)とかを導入?
|
||||||
|
|
||||||
λ□: box(cross-stage persistence)を導入
|
λ□: box(cross-stage persistence)を導入
|
||||||
|
|
||||||
λ○□:両方を統合
|
λ○□:両方を統合
|
||||||
|
@ -13,12 +13,11 @@
|
|||||||
[[Coqの勉強]]
|
[[Coqの勉強]]
|
||||||
|
|
||||||
|
|
||||||
## mimiumと多段階計算
|
## mimiumと[[多段階計算]]
|
||||||
|
|
||||||
こういうのが計算できなかった
|
こういうのが計算できなかった(要するにfixpointの中で`self`を使うと必要な`self`のサイズを確定できない)
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
|
|
||||||
fn filterbank(N,input,lowestfreq, margin,Q,filter){
|
fn filterbank(N,input,lowestfreq, margin,Q,filter){
|
||||||
if(N>0){
|
if(N>0){
|
||||||
return filter(input,lowestfreq+N*margin,Q)
|
return filter(input,lowestfreq+N*margin,Q)
|
||||||
@ -27,15 +26,13 @@ fn filterbank(N,input,lowestfreq, margin,Q,filter){
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
仮に多段階計算だとしてちょっと型を明示してみる
|
仮に多段階計算だとしてちょっと型を明示してみる
|
||||||
まあ〜書きづらいよな
|
まあ〜書きづらいよな
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
|
fn gen_filterbank(N:int,lowestfreq:float, margin:float,Q:float,filter:(float,float,float)->float)-> <(float,float,float)->float> {
|
||||||
fn gen_filterbank(N:int,lowestfreq:float, margin:float,Q:float,filter:float->float)-> <float->float> {
|
|
||||||
// level:0
|
// level:0
|
||||||
if(N>0){
|
if(N>0){
|
||||||
< //level:1
|
< //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)
|
~(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`でやりたいよねえ
|
filter同士の足し算を`+`の`infix`でやりたいよねえ
|
||||||
let多相じゃないよなあこれは
|
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
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user