【发布时间】:2020-08-15 11:55:25
【问题描述】:
我被分配了一个任务,我必须将一个 Scheme 函数转换为一个 C++ 函数。这是 Scheme 函数:
(DEFINE someFunction
(LAMBDA (n)
(IF (>= n 0)
n
(- 0 n))))
如果我错了,请纠正我,但 DEFINE 将名称 someFunction 绑定到 LAMBDA 表达式 n。如果n 大于或等于0,则简单地返回n。否则返回0 - n。
这是我将其转换为 C++ 时的想法:
int someFunction() {
int n;
if (n >= 0)
return n;
else
return (0 - n);
}
我做对了吗?任何提示都会有所帮助!我想知道我做错了什么,所以不要退缩。
【问题讨论】:
-
如果我正确阅读了一些文档,在 Scheme 代码中,变量
n被认为是函数本身的参数。您的 C++ 代码使用n作为本地变量,更重要的是 uninitialized 变量。 C++ 中未初始化的局部(非静态)变量将具有 indeterminate(看似随机或垃圾)值,并且在未初始化的情况下使用此类变量会导致 未定义行为。 -
如果我正确理解你的功能,它相当于
std::abs。除非您有学校或书本练习,否则请始终使用标准函数,而不是自己发明。
标签: c++ lambda scheme translate