【发布时间】:2011-01-25 16:30:23
【问题描述】:
这是一个 lisp 过程,它简单地将 'a' 添加到 'b' 的绝对值:
(define (a-plus-abs-b a b)
((if (> b 0) + -) a b))
我认为这很漂亮,我正在努力寻找用 JavaScript 编写它的最佳方式。但是我的 JavaScript 代码并不漂亮:
var plus = function(a,b) {
return a + b;
};
var minus = function(a,b) {
return a - b;
};
var aPlusAbsB = function(a,b) {
return (b > 0 ? plus : minus)(a,b);
}
主要问题是我不能使用 + 和 - 符号作为对它们真正代表的函数的引用,就像我可以使用 lisp 一样。任何人都可以想出一个更优雅的方式来做这样的事情,还是我达到了语言边界?
显然,我可以这样做:
var aPlusAbsB = function(a,b) {
return a + Math.abs(b);
}
,但这更像是一个思想实验,而不是一个务实的问题。
有什么方法可以让我引用 JavaScript 语言中的核心函数,就像它们是用户定义的一样?
【问题讨论】:
-
您是否看过 Functional.js 及其将简单函数表示为字符串的古怪而可爱的语法?
-
我也不知道内置算术运算符是否真的存在任何真正意义上的 Function 实例。
-
我看过函数库,它看起来很酷。我只是想知道是否有任何方法可以仅使用核心 JS 来做到这一点。和@Pointy 我想知道同样的事情。它们可能不是 Function 对象,但其中的逻辑执行方式类似于函数的执行方式。
-
嗯,我对这个问题很感兴趣,在学术上,但我从未见过任何让我认为某处有这样的 Function 对象的参考资料。然而,Javascript 总是令人惊奇。
-
@Pointy:我一直认为大多数算术运算符都是在 CPU 级别运行的。但这可能不适用于 JavaScript。
标签: javascript functional-programming lisp scheme