[obsidian] vault backup: 2025-09-25 13:38:52[
All checks were successful
Build / build (push) Successful in 10m47s

This commit is contained in:
2025-09-25 13:38:52 +09:00
parent 410cca5f13
commit a1ed1f1f74
2 changed files with 29 additions and 8 deletions

View File

@@ -5,7 +5,7 @@ date: 2024-10-20 12:02
ツリー形式からBasicBlockのインストラクション形式に変える
Stateのこととupvalueを両方処理しなくてはならない
Stateのこととupvalueを両方処理しなくてはならない。ワンパスで処理できるのか?
StateSize計算とUpvalue計算の両方をtraitとして切り出す方がいいのかな
@@ -48,11 +48,32 @@ $$
## コンパイル
```ocaml
let compiler = fun e -> match e with
Id(x) ->
| App(e1,e2)->
| Feed(x,e) ->
```rust
fn eval(e:ExprNodeId,env:Env<Value>)->(Value,Type){
match e.to_expr() {
Expr::Id(name)=>{
env.lookup(name)
},
Expr::Let(name,e,body)=>{
let env = env.extend((name,eval(e,env).0));
eval(e,env)
},
Expr::App(e,args)=>{
let (f,ft) = eval(e,env);
let argvs = args.iter().map(|e| eval(e,env));
match f{
Value::Closure(fproto,names,body,env)=>{
let kvs = names.iter().zip(argvs.zip()).collect()
let env = env.extend(kvs);
eval(body,env)
}
_=>panic!()
}
}
}
}
```

View File

@@ -32,7 +32,7 @@ MaxMSPやPureDataにおける信号処理のように、信号処理のイ
これはソースコードの増分比較に基づいている。同じ差分でも、複数の変更のパターンがあり得るので、単なるテキスト比較ではなくEmacsの拡張として操作の履歴を取得している。
プリミティブを小さくする&&ソースコードの変更→評価の間隔が短くても済むような仕組みを作れ
プリミティブを小さくする&&ソースコードの変更→評価の間隔が短くても済むような仕組みを作れば良い。
## lambda-mmmの記法
@@ -78,9 +78,9 @@ MaxMSPやPureDataにおける信号処理のように、信号処理のイ
## 将来的な展望
原理的にはFaustでも実現できるはず。
ディレイ、Feed以外に、外部定義の関数呼び出しにもこの仕組みを応用できるかLuaのUserData的な仕組み。