Я пытаюсь реализовать комбинатор K из исчисления комбинатора SK на С++. Комбинатор K — это функция высшего порядка, которая обычно принимает некоторое значение x
и возвращает что-то который в свою очередь принимает значение y
и возвращает из него x
. Другими словами,
K(x)(y) == x
или пошагово:
intermediate = K(x)
intermediate(y) == x
Способность обращаться с K(x)
как с вещью в себе, независимой от y
, необходима. Кроме того, нет необходимости указывать тип y
при простом создании K(x)
без вызова его на 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
. Я пытался настроить параметры шаблона и перемещать их, но безрезультатно. Кто-нибудь знает, как я могу исправить эту ошибку?