这是一个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); }
,但这更像是一个思想实验,而不是一个实用的问题.
解决方法
这是一个非常酷的想法 – 对于评估数学表达式非常有用,但是你根本无法将一个运算符(或它背后的逻辑)设置为一个变量.对不起:-)