我需要一种(快速和脏的)方法来获得一个以字符串形式给出的Haskell表达式的表示.
我目前看到3个选项:
我甚至不需要一个完整的解决方案,因为可以输入一个合理的Haskell基本子集的库/工具就足够了.
那么实现这一目标的最简单方法是什么?
我有以下代码段.
template< typename T >
struct f
{
template< typename V >
struct a : f
{};
};
int main ()
{
f<int>::a<int>::a<double> x;
}
Run Code Online (Sandbox Code Playgroud)
它在GCC 4.4.5以及MSVC 2010上没有警告编译,但在GCC 4.5.2上没有 - 我得到以下错误:
test.cc: In function 'int main()':
test.cc:11:21: error: expected primary-expression before 'double'
test.cc:11:21: error: expected ';' before 'double'
Run Code Online (Sandbox Code Playgroud)
因此,虽然我没有看到任何关于它的非标准问题,但问题是强制性的 - 这在C++中是否合法?此外,如果是,我如何在GCC提交错误报告?(:
编辑:好奇的一点背景:
这应该是一块模板元编程.f
基本上具有apply
替换的模板元函数类的结构a
(当然嵌套type
的apply
被省略,所以我们可以专注于结构本身).
在这种情况下,继承是用于绑定元函数返回值的标准设备.这个代码片段试图实现的是一个元函数类,在计算时递归地自我产生.
edit2:让我有点不同的相同片段:
template< typename T >
struct f
{
template< typename V > struct a; …
Run Code Online (Sandbox Code Playgroud) 我正在尝试整理一个动画,我可以在其中指定速度(而不是持续时间),并且永远循环.我想出了两个不起作用的例子:
FirstTry.qml
import Qt 4.7
Rectangle {
width: 100; height: 100
Text {
text: "hello"
NumberAnimation on x {
to: 50;
loops: Animation.Infinite;
duration: 50 * Math.abs(to - from)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我hello
在屏幕上疯狂时得到以下运行时警告(足够公平).
QDeclarativeExpression: Expression "(function() { return 50 * Math.abs(to - from) })" depends on non-NOTIFYable properties:
QDeclarativeNumberAnimation::to
QDeclarativeNumberAnimation::from
Run Code Online (Sandbox Code Playgroud)
SecondTry.qml
import Qt 4.7
Rectangle {
width: 100; height: 100
Text {
text: "hello"
SmoothedAnimation on x {
to: 50;
loops: Animation.Infinite;
velocity: 50
}
}
}
Run Code Online (Sandbox Code Playgroud)
这更像是一种谜 …
给定一个Haskell表达式,我想执行alpha转换,即.重命名一些非自由变量.
我已经开始实现我自己的函数了,它可以在haskell-src-exts Exp树上运行,但事实证明它非常重要,所以我不禁想知道 - 是否有一个易于使用的已建立的库这种源转换的解决方案?理想情况下,它应该与haskell-src-exts集成.