問題タブ [metaocaml]
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#で説明する方法はありますか?
コードサンプル:
types - Concoqtion (Coq + MetaOCaml) - なぜ放棄されたのですか?
OCaml メーリング リストで人々に迷惑をかける前に、ここに質問を投稿しようと考えていました。この美しさを発見しました(Concoqtion の Web サイトへのリンク)。Concoqtion は MetaOCaml の拡張であり、インデックス付きの型 (およびおそらくそれ以上) を許可します。これを使用すると、リストの長さも含むタイプのリストを簡単に作成できます。
これ(m+1)
は型レベルで行われます。とてもきれいです。
ただし、最後のバージョンは 2007 年のものです (OCaml 3.08)。このプロジェクトがキャンセルされた理由、または今日の OCaml に類似したものがあるかどうか、誰か考えていますか?
ocaml - MetaOCaml 用に Merlin 環境をセットアップすることは可能ですか?
MetaOCaml用に Merlin 環境をセットアップすることは可能ですか?
ocaml - MetaOCaml の非修飾コンストラクター
エラーが発生しますUnqualified constructor A cannot be used within brackets. Put into a separate file.
このエラーの根本的な理由は何ですか?
ここでいくつかの参照を見つけることができます
ocaml - MetaOCaml コードを実行する
BER MetaOCaml を次のようにインストールしました。
また、tuareg トップレベルまたは単に ocaml トップレベルで MetaOCaml コードを実行できません。次のコード:
結果は
試し#load "trx.cma"
ましたが、ファイルが見つかりません。
回答編集:
metaocaml は適切な実行可能ファイルです。
これを追加した後:
私の .emacs では、MetaOCaml を で実行できるようになりましたC-c M-s
。
ocaml - let を挿入してローカル変数をバインドする
私は Oleg Kiselyov のチュートリアルReconciling Abstraction with High Performance: A MetaOCaml approach に取り組んでいます。1 つの演習 (演習 23) では、ローカル変数への配列インデックス アクセスをバインドするために、let 挿入が要求されます。問題の関数は でvmult_ca
、複素数の配列を乗算するためのコードを生成します。
vout
結果を格納する出力ベクトルは
どこにありますか。Vec (n, fun i -> v)
は抽象ベクトルで、n
は長さで、fun i -> v
各インデックスを値にマップします。
OVec (n, fun i v -> body)
は抽象的な「出力ベクトル」でn
あり、 は長さでありfun i v -> body
、各インデックスi
および の関連する出力要素v
で実行されi
ます。
値を値にof_complex_code
変換します。たとえば、 に変換します。このモジュールは、(点ごとの) ベクトル乗算を定義します (詳細については、こちらのコードを参照してください)。complex code
code complex
.<{real=1.0, imag=0.0}>.
{real=.<1.0>., imag=.<0.0>.}
VMULT
実行するとvmult_ca
、次のコードが生成されます。
注記v1_5.(i_8)
は 4 回繰り返されます。課題は、繰り返しを避けるためにローカル変数にバインドするためにlet
どこかに挿入することです。を呼び出すだけで「ごまかす」ことができましたが、なしでどこに挿入すればよいかわかりません。ヒントをいただければ幸いです。vmult_ca
v1_5.(i_8)
genlet
.<v1.(~i)>.
let
genlet