問題タブ [multi-stage-programming]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
f# - F# の引用符: 変数はスコープをエスケープする可能性があります
私はこのビットのコードを持っています:
http://www.cs.rice.edu/~taha/publications/journal/dspg04a.pdfの MetaOcaml の例から変換
この論文では、上記の例がパラメーター3
および.<1>.
(MetaOcaml 表記) を使用して以下を生成することが説明されています。
ご覧のとおり、 はなどx
に置き換えられます。それ以外の場合は、最も内側の のみを参照するためです。x_1
x_2
x
x
fun
しかし、F# ではこれは許可されていません。コンパイル時に次のエラーが表示されます。問題は、コンパイルして MetaOcaml の出力と同じセマンティックになるように、これをどのように変更できるかということです。
コメントの更新: PowerPack を使用して実際に見積もりを評価します。しかし、エラーはコンパイル時に発生するため、これとは何の関係もないと思います。これまでのところ QuotationEvaluation は機能しています。ただし、それが最も効率的な実装ではない可能性があることはわかっています。
Tomas の回答への更新:x
をグローバルにしたり、スコープをエスケープしたりし
たくありません。しかし、私が欲しいのは
引用符で。あなたの答えは(h 3 <@ 1 @>).Eval() = 4
、上記の結果がどこにあるかを示しますh 3 1 = 7
。そしてここで、私は答えになりたいです7
。
f# - F# クォーテーションのもう 1 つの制限はありますか?
今日、私は F# クォーテーションの制限に遭遇し、それについてここで質問しました: F# クォーテーション: 変数はスコープをエスケープする可能性があります
ここで、 http: //www.cs.rice.edu/~taha/publications/journal/dspg04a.pdf にある例を MetaOcaml から F#に変換するときに、別の制限に遭遇した可能性があります。
今回は、この MetaOcaml スニペットを用意しました。
そして私はそれをに変換しました
次のコンパイル時エラーが発生This expression was expected to have type int -> Expr<int> but here has type Expr<'a>
します<@ f @>
。
直感的には、エラーは非常に理にかなっていると思います。しかし、この場合に私が望むものをF#で説明する方法はありますか?
コードサンプル: