問題タブ [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.

0 投票する
1 に答える
689 参照

f# - F# の引用符: 変数はスコープをエスケープする可能性があります

私はこのビットのコードを持っています:

http://www.cs.rice.edu/~taha/publications/journal/dspg04a.pdfの MetaOcaml の例から変換

この論文では、上記の例がパラメーター3および.<1>.(MetaOcaml 表記) を使用して以下を生成することが説明されています。

ご覧のとおり、 はなどxに置き換えられます。それ以外の場合は、最も内側の のみを参照するためです。x_1x_2xxfun

しかし、F# ではこれは許可されていません。コンパイル時に次のエラーが表示されます。問題は、コンパイルして MetaOcaml の出力と同じセマンティックになるように、これをどのように変更できるかということです。

コメントの更新: PowerPack を使用して実際に見積もりを評価します。しかし、エラーはコンパイル時に発生するため、これとは何の関係もないと思います。これまでのところ QuotationEvaluation は機能しています。ただし、それが最も効率的な実装ではない可能性があることはわかっています。

Tomas の回答への更新:xをグローバルにしたり、スコープをエスケープしたりし たくありません。しかし、私が欲しいのは

引用符で。あなたの答えは(h 3 <@ 1 @>).Eval() = 4、上記の結果がどこにあるかを示しますh 3 1 = 7。そしてここで、私は答えになりたいです7

0 投票する
1 に答える
615 参照

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#で説明する方法はありますか?

コードサンプル:

0 投票する
1 に答える
381 参照

types - Concoqtion (Coq + MetaOCaml) - なぜ放棄されたのですか?

OCaml メーリング リストで人々に迷惑をかける前に、ここに質問を投稿しようと考えていました。この美しさを発見しました(Concoqtion の Web サイトへのリンク)。Concoqtion は MetaOCaml の拡張であり、インデックス付きの型 (およびおそらくそれ以上) を許可します。これを使用すると、リストの長さも含むタイプのリストを簡単に作成できます。

これ(m+1)は型レベルで行われます。とてもきれいです。

ただし、最後のバージョンは 2007 年のものです (OCaml 3.08)。このプロジェクトがキャンセルされた理由、または今日の OCaml に類似したものがあるかどうか、誰か考えていますか?

0 投票する
1 に答える
152 参照

ocaml - MetaOCaml 用に Merlin 環境をセットアップすることは可能ですか?

MetaOCaml用に Merlin 環境をセットアップすることは可能ですか?

0 投票する
1 に答える
82 参照

ocaml - MetaOCaml の非修飾コンストラクター

エラーが発生しますUnqualified constructor A cannot be used within brackets. Put into a separate file.

このエラーの根本的な理由は何ですか?

ここでいくつかの参照を見つけることができます

0 投票する
0 に答える
343 参照

ocaml - MetaOCaml コードを実行する

BER MetaOCaml を次のようにインストールしました。

また、tuareg トップレベルまたは単に ocaml トップレベルで MetaOCaml コードを実行できません。次のコード:

結果は

試し#load "trx.cma"ましたが、ファイルが見つかりません。

回答編集:

metaocaml は適切な実行可能ファイルです。

これを追加した後:

私の .emacs では、MetaOCaml を で実行できるようになりましたC-c M-s

0 投票する
1 に答える
61 参照

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 codecode complex.<{real=1.0, imag=0.0}>.{real=.<1.0>., imag=.<0.0>.}VMULT

実行するとvmult_ca、次のコードが生成されます。

注記v1_5.(i_8)は 4 回繰り返されます。課題は、繰り返しを避けるためにローカル変数にバインドするためにletどこかに挿入することです。を呼び出すだけで「ごまかす」ことができましたが、なしでどこに挿入すればよいかわかりません。ヒントをいただければ幸いです。vmult_cav1_5.(i_8)genlet.<v1.(~i)>.letgenlet