【发布时间】:2021-07-18 11:28:01
【问题描述】:
我在 C++ 中实现了 lambda 演算,但现在我不知道如何摆脱它。我想测试我的函数是否返回正确的东西,但我无法比较结果,因为它是一个函数。有谁知道如何测试我的代码?
#include <functional>
class function :
public std::function<function (function)> {
public: using type =
std::function<function (function)>;
public: using type::function;
};
function True = [](function x) {
return [&](function y) {
return x;
};
};
function False = [](function x) {
return [&](function y) {
return y;
};
};
function If = [](function x) {
return [&](function y) {
return [&](function z) {
return x(y)(z);
};
};
};
function And = [](function x) {
return [&](function y) {
return x(y)(x);
};
};
function Or = [](function x) {
return [&](function y) {
return x(x)(y);
};
};
// ...
int main()
{
// ?
}
【问题讨论】:
-
给
function添加标签?使用“获取指向存储的指针”api?传递一个 null/not null 函数并使用 operator bool? -
谢谢@Yakk-AdamNevraumont!我不想修改
function类,但是当我尝试调用返回的空函数时,我可以检查是否出现异常。当我写测试时,我会写下我的问题的答案。 -
你可以执行函数并断言结果
-
谢谢! @AlessandroTeruzzi
-
std::function并不意味着继承自,它没有virtual destructor
标签: c++ function functional-programming lambda-calculus purely-functional