[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
...
fn osc(){
...
}
fn additive(n,gen){
let g = gen()
if (n>1){
let c = additive(n - 1.0 ,gen)
|rate| c(rate) + g(rate)/n
let next = additive(n-1 ,gen)
|rate| next(rate) + g(rate*n)/n
}else{
|rate| g(rate)
}
}
...
fn osc(){
...
}
let myosc = additive(5, | | osc);
fn dsp(){
let f = 200
@@ -149,6 +149,16 @@ fn dsp(){
```
```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)
let PI = 3.14159265359
fn phasor_shift (freq,phase_shift){
@@ -160,20 +170,9 @@ fn sinwave = (freq,phase){
fn osc = (freq){
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(){
let f = 1000
let r = f |> additive!(10,`osc) |> Probe!("test")
let f = 200
let r = f |> additive!(5,`osc)
(r,r)
}
```
@@ -184,8 +183,9 @@ fn dsp(){
${
let additive = |n,gen|{
if (n>1){
let divider = lift_f(n)
`|rate| ($gen)(rate) / $divider + $additive(n - 1.0 ,gen)
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)
}
@@ -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