From fd520e800f50118514af2510b519a5ac9c0f52be Mon Sep 17 00:00:00 2001 From: "Tomoya Matsuura(MacBookPro)" Date: Fri, 8 Sep 2023 22:47:39 +0900 Subject: [PATCH] [obsidian] vault backup: 2023-09-08 22:47:38[ --- content/mimium新内部表現の構想.md | 131 +++++++++++++++++++++++++++++- 1 file changed, 129 insertions(+), 2 deletions(-) diff --git a/content/mimium新内部表現の構想.md b/content/mimium新内部表現の構想.md index 43c46121..943af584 100644 --- a/content/mimium新内部表現の構想.md +++ b/content/mimium新内部表現の構想.md @@ -69,6 +69,133 @@ $$ ## 実例 ```rust -fn +fn cascade(order:int,fb)->(float->float){ + if(order>0){ + |x|{ + cascade(N-1)(x) *(1-fb) + self*fb + } + }else{ + |x| x + } +} +``` -``` \ No newline at end of file + +ちょっとわかりやすさのために`self`を使わずfeedにしてみる + +```rust +fn cascade(order:int,fb)->(float->float){ + if(order>0){ + |x|{ + feed(y) { cascade(N-1)(x) *(1-fb) + y*fb } + } + }else{ + |x| x + } +} +``` + +あー、今までは`fn(x)`でself使うものを`feed(self).lambda(x).e,`って感じに自動的に変換してたけど、変換するとしたら`lambda(x).feed(x).e`の方が良かったってことなんだな + +これを`cascade(3,0.9)`とかで簡約してみるか + +```rust +cascade(3,0.9) + +|x|{ + let res = cascade(2)(x); + feed(y) { res*0.1 + y*0.9 } +} +|x1|{ + let res1 =|x2|{ + let res2 = cascade(1)(x2); + feed(y2) { res2*0.1 + y2*0.9 } + }(x1); + feed(y1) { res1*0.1 + y1*0.9 } +} +|x1|{ + let res1 =|x2|{ + let res2 = |x3|{ + let res3 = cascade(0)(x3); + feed(y3) { res3*0.1 + y3*0.9 } + }(x2); + feed(y2) { res2*0.1 + y2*0.9 } + }(x1); + feed(y1) { res1*0.1 + y1*0.9 } +} +|x1|{ + let res1 =|x2|{ + let res2 = |x3|{ + let res3 = |x|{x}(x3); + feed(y3) { res3*0.1 + y3*0.9 } + }(x2); + feed(y2) { res2*0.1 + y2*0.9 } + }(x1); + feed(y1) { res1*0.1 + y1*0.9 } +} +|x1|{ + let res1 =|x2|{ + let res2 = |x3|{ + let res3 = x3; + feed(y3) { res3*0.1 + y3*0.9 } + }(x2); + feed(y2) { res2*0.1 + y2*0.9 } + }(x1); + feed(y1) { res1*0.1 + y1*0.9 } +} +|x1|{ + let res1 =|x2|{ + let res2 = |x3|{ + feed(y3) { x3*0.1 + y3*0.9 } + }(x2); + feed(y2) { res2*0.1 + y2*0.9 } + }(x1); + feed(y1) { res1*0.1 + y1*0.9 } +} +|x1|{ + let res1 =|x2|{ + let res2 = feed(y3) { x2*0.1 + y3*0.9 }; + feed(y2) { res2*0.1 + y2*0.9 } + }(x1); + feed(y1) { res1*0.1 + y1*0.9 } +} +|x1|{ + let res1 =|x2|{ + feed(y2) { feed(y3) { x2*0.1 + y3*0.9 } *0.1 + y2*0.9 } + }(x1); + feed(y1) { res1 *0.1 + y1*0.9 } +} +|x1|{ + let res1 = feed(y2) { feed(y3) { x1 *0.1 + y3*0.9 } *0.1 + y2*0.9 }; + feed(y1) { res1 *0.1 + y1*0.9 } +} +|x1|{ + feed(y1) { + feed(y2) { + feed(y3) { x1*0.1 + y3*0.9} *0.1 + y2*0.9 }*0.1 + y1*0.9 } +} +``` + +feedの項に対する加算とか乗算の計算は簡約がしづらいなあ + +時間0の時のyは全て0として、 + +```rust +|x1,y1_ref,y2_ref,y3_ref| { + let y1 = *y1_ref; + let y1_next= { + let y2 = *y2_ref; + let y2_next = { + let y3 = *y3_ref; + let y3_next = x1*0.1 + y3*0.9; + *y3_ref = y3_next; + y3_next + }*0.1 + y2*0.9; + *y2_ref = y2_next; + y2_next }*0.1 + y1*0.9; + *y1_ref = y1_next; + y1_next +} +``` + +やっぱdenotationalの方が定義しやすいかもなあ \ No newline at end of file