[obsidian] vault backup: 2025-12-18 17:11:19[
All checks were successful
Build / build (push) Successful in 8m16s

This commit is contained in:
2025-12-18 17:11:19 +09:00
parent 7badf982ca
commit 171ea2138e

View File

@@ -126,20 +126,20 @@ mimiumでは、多段階計算の体系を直感的に扱えるように2つの
### 多段階計算によるメタ操作の実例 ### 多段階計算によるメタ操作の実例
```rust ```rust
...
fn osc(){
...
}
fn additive(n,gen){ fn additive(n,gen){
let g = gen() let g = gen()
if (n>1){ if (n>1){
let c = additive(n - 1.0 ,gen) let next = additive(n-1 ,gen)
|rate| c(rate) + g(rate)/n |rate| next(rate) + g(rate*n)/n
}else{ }else{
|rate| g(rate) |rate| g(rate)
} }
} }
...
fn osc(){
...
}
let myosc = additive(5, | | osc); let myosc = additive(5, | | osc);
fn dsp(){ fn dsp(){
let f = 200 let f = 200
@@ -149,6 +149,16 @@ fn dsp(){
``` ```
```rust ```rust
#stage(macro)
fn additive(n,gen){
if (n>1){
let n_lifted = lift_f(n)
let next = additive(n-1 ,gen)
`|rate| ($next)(rate) + ($gen)(rate*$n_lifted) / $n_lifted
}else{
`|rate| ($gen)(rate)
}
}
#stage(main) #stage(main)
let PI = 3.14159265359 let PI = 3.14159265359
fn phasor_shift (freq,phase_shift){ fn phasor_shift (freq,phase_shift){
@@ -160,20 +170,9 @@ fn sinwave = (freq,phase){
fn osc = (freq){ fn osc = (freq){
sinwave(freq,0.0) * 0.5 sinwave(freq,0.0) * 0.5
} }
#stage(macro)
fn additive(n,gen:`(float)->float)->`(float)->float{
if (n>1){
let multiplier = lift_f(n)
let next = additive(n - 1.0 ,gen)
`|rate|{ ($gen)(rate*$multiplier) / $multiplier + ($next)(rate)}
}else{
`|rate| ($gen)(rate)
}
}
#stage(main)
fn dsp(){ fn dsp(){
let f = 1000 let f = 200
let r = f |> additive!(10,`osc) |> Probe!("test") let r = f |> additive!(5,`osc)
(r,r) (r,r)
} }
``` ```
@@ -184,8 +183,9 @@ fn dsp(){
${ ${
let additive = |n,gen|{ let additive = |n,gen|{
if (n>1){ if (n>1){
let divider = lift_f(n) let n_lifted = lift_f(n)
`|rate| ($gen)(rate) / $divider + $additive(n - 1.0 ,gen) let next = additive(n-1 ,gen)
`|rate| ($next)(rate) + ($gen)(rate*$n_lifted) / $n_lifted
}else{ }else{
`|rate| ($gen)(rate) `|rate| ($gen)(rate)
} }
@@ -203,6 +203,19 @@ fn dsp(){
} }
} }
``` ```
```rust
// after macro expansion
let osc = | | {
...
}
let dsp = | |{
let f = 200
let r = f |> |f| osc(f*5)/5 + osc(f*4)/4 + ... osc(f)
(r,r)
}
```
## コールツリーの解析 ## コールツリーの解析
```rust ```rust