【发布时间】:2016-02-15 07:19:11
【问题描述】:
我正在尝试在 C++ 中实现来自 SK combinator calculus 的 K 组合子。 K 组合器是一个higher-order function,它基本上取一些值x,并返回一些东西,反过来取一个值y 并从中返回x。换句话说,
K(x)(y) == x
或一步一步:
intermediate = K(x)
intermediate(y) == x
将K(x) 视为独立于y 的事物本身的能力至关重要。此外,在简单地创建K(x) 而不在y 上调用它时,不必指定y 的类型。 y 的类型可以在代码中某处被评估 K(x)(y) 时指定。
我正在尝试修复我编写的尝试实现 K 组合器的代码:
#include <iostream>
template<class A>
template<class B>
auto K = [](A x) {
return [=](B y) {
return x;
};
};
int main()
{
std::cout << "Hello world!\n";
auto Kx = K<int>(3);
auto Kxy = Kx<float>(4.5);
std::cout << Kxy << std::endl;
}
它输出error: extraneous template parameter list in template specialization or out-of-line template definition。我尝试调整模板参数并移动它们无济于事。有谁知道我该如何解决这个错误?
【问题讨论】:
标签: c++ templates metaprogramming functor higher-order-functions