F#でlinq式ビルダーに簡単なExcel式を書いています。数式をASTに解析し、再帰式ビルダーを使用して式を作成しています。私はその呼び出しで生成された式に環境((文字列、式)ペアのマップ)を渡すことに固執しました:
Expression.Lambda<System.Func<double>>(eval pexpr).Compile()
ここで、pexprはASTで解析され、evalは式ビルダー関数です。
問題は、次のように見えるタイプを定義することです。
type ExprFunc = Func<ExprFunc map, double>
Expression.Lambda<ExprFunc>(eval pexpr).Compile()
pexprにVar( "name")の形式で他の式への参照が含まれている場合、環境マップで "name"を使用して関数を検索する式を挿入して呼び出し、同じ環境マップをその呼び出しで渡します。
残念ながら、コンパイラはノーと言っています。
この型の定義には、省略形による即時の循環参照が含まれます
.netでそのような関数型を定義する方法はありますか?