From 171ea2138e0929a21f5e5065702eacddbfc3abb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=BE=E6=B5=A6=20=E7=9F=A5=E4=B9=9F=20Matsuura=20Tomoy?= =?UTF-8?q?a?= Date: Thu, 18 Dec 2025 17:11:19 +0900 Subject: [PATCH] [obsidian] vault backup: 2025-12-18 17:11:19[ --- ...ƒ†ã‚£ãƒ–プログラミングã«ã‚ˆã‚‹ä¿¡å·å‡¦ç†ã®ãƒ©ã‚¤ãƒ–コーディング.md | 57 ++++++++++++------- 1 file changed, 35 insertions(+), 22 deletions(-) diff --git a/content/多段階計算ã¨å¢—分関数型リアクティブプログラミングã«ã‚ˆã‚‹ä¿¡å·å‡¦ç†ã®ãƒ©ã‚¤ãƒ–コーディング.md b/content/多段階計算ã¨å¢—分関数型リアクティブプログラミングã«ã‚ˆã‚‹ä¿¡å·å‡¦ç†ã®ãƒ©ã‚¤ãƒ–コーディング.md index 55c39a78..f5cf50c3 100644 --- a/content/多段階計算ã¨å¢—分関数型リアクティブプログラミングã«ã‚ˆã‚‹ä¿¡å·å‡¦ç†ã®ãƒ©ã‚¤ãƒ–コーディング.md +++ b/content/多段階計算ã¨å¢—分関数型リアクティブプログラミングã«ã‚ˆã‚‹ä¿¡å·å‡¦ç†ã®ãƒ©ã‚¤ãƒ–コーディング.md @@ -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