问题标签 [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's 被替换为等x_1x_2因为x否则只会指代x最里面的fun

但在 F# 中这是不允许的。我收到编译时错误:“变量 'x' 绑定在引号中,但用作拼接表达式的一部分。这是不允许的,因为它可能会超出其范围。” 所以问题是:如何改变它以便编译并具有与 MetaOcaml 输出相同的语义?

更新评论:我使用 PowerPack 来实际评估报价。但我认为这与它没有任何关系,因为错误发生在编译时。到目前为止 QuotationEvaluation 有效。但是,我知道这可能不是最有效的实现。

更新 Tomas 的回答: 我真的不希望x成为全球性的,或逃避范围。但我想要的是相当于

带引号。您的回答给出(h 3 <@ 1 @>).Eval() = 4了上述产生的位置h 3 1 = 7。在这里,我想7成为答案。

0 投票
1 回答
615 浏览

f# - F# 引用的另一个限制?

今天早些时候我遇到了 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 网站)。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,我现在可以使用C-c M-s.

0 投票
1 回答
150 浏览

ocaml - MetaOCaml:无法从括号中运行代码

我正在尝试 MetaOCaml,所以我制作了这个很棒的代码:

为什么它不起作用?

另外,我已经尝试过了!..!因为我在网站上都看到过,但不知道哪一个是正确的。

0 投票
0 回答
74 浏览

emacs - 使用 tuareg-support-metaocaml 在 Emacs 中进行 MetaOCaml 分段注释语法高亮显示

TL:博士;我想在 Emacs 中突出显示 MetaOCaml 语法,但相关选项无效。我能做些什么?

我对 Emacs 很陌生,但使用 MetaOCaml 已经有一段时间了。

我通过我的发行版的包管理器(portage)安装了 opam 1.3.1-r1 和 emacs 25.2。随后,我通过 opam(按此顺序)安装了 BER MetaOCaml 4.04.0+BER 和 tuareg 2.0.10。我已编辑 .emacs 以添加以下行:(加载“/home/user/.opam/4.04.0+BER/share/emacs/site-lisp/tuareg-site-file”)和(setq tuareg- http://okmij.org/ftp/ML/MetaOCaml.html建议的 support-metaocaml t) 。但是,当我加载包含暂存注释的文件时,它们不会以任何方式突出显示(参见附图)。多阶段的字体锁定未受影响,并且看起来暂存注释应该是浅灰色的深蓝色。

我之前已经在 Windows 的 Linux 子系统(似乎是没有 Xorg 的普通 Ubuntu)上尝试过这个,在另一台具有 BER MetaOCaml 4.02.1+BER 和 4.04.0+BER 的机器上,使用 opam 的 tuareg 2.0.10,它是user-setup 包为我配置 emacs 并使用 Mx customize 设置 tuareg-support-metaocaml。这产生了与所附屏幕截图相同的看似不令人满意的结果。

我应该(或不应该)做些什么来让它工作,还是我误解了预期的行为?

先感谢您。

(请注意,我已经将此作为问题发布在 tuareg Github 存储库中:https ://github.com/ocaml/tuareg/issues/151 。抱歉,如果这不受欢迎。)

X下Emacs中MetaOCaml的例子

终端中 Emacs 中的 MetaOCaml 示例

0 投票
1 回答
61 浏览

ocaml - 插入 let 绑定局部变量

我正在阅读 Oleg Kiselyov 的教程Reconciling Abstraction with High Performance: A MetaOCaml approach。一个练习(练习 23)要求使用 let-insertion 将数组索引访问绑定到局部变量。question 的函数是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上运行iof_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)>.,但我不知道在哪里插入letwithout genlet; 任何提示将不胜感激。