我的任务是在javascript中编写函数f,
f(0)+f(1)//should return 0 if evaluated from left to right
//should return 1 if evaluated from right to left
如何实现f函数?我正在考虑跟踪f之前是否被调用,但不知道如何调用。
方案解决方案如下:
(定义f (让((设#f)) (定义(fn n) (如果设置 0 (开始(设置!设置#t) N))) FN))
答案 0 :(得分:1)
Scheme解决方案似乎归结为
var f = (function() {
var set = false;
function fn(n) {
if (set) {
return 0;
} else {
set = true;
return n;
}
}
return fn;
}());
这有点无聊但预期。是的,您需要跟踪f
之外的某个状态,声明一个额外的变量是最简单的解决方案。它不需要是全局的,set
隐藏在IIFE的范围内。
答案 1 :(得分:1)
具有该功能属性的解决方案。
function f(v) {
return [f.value || 0, f.value = v][0];
}
console.log(f(0) + f(1)); // 0

function f(v) {
return [f.value || 0, f.value = v][0];
}
console.log(f(1) + f(0)); // 1

答案 2 :(得分:0)
我确定它的版本较短......
function f(arg) {
if (!f.called && arg === 0) {
f.called = true;
return 0;
} else if (f.called && arg === 1) {
return 1;
}
return 0;
}