问题标签 [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.

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 回答
93 浏览

python - 输出相关的 PySP 命令结果:** 至少有一个 sub-... 未能解决!**

![截图来自命令的错误结果:

] 1

虽然我仍然可以获得输出,但我想知道这个错误警告是什么

"** 至少有一个子问题没能解决!**"

意思是?接下来我该怎么做?谢谢你的帮助。