Mat*_*lor 7 javascript lisp scheme functional-programming
这是一个lisp过程,简单地将'a'添加到'b'的绝对值:
(define (a-plus-abs-b a b)
((if (> b 0) + -) a b))
Run Code Online (Sandbox Code Playgroud)
我认为这很漂亮,我试图找到用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);
}
Run Code Online (Sandbox Code Playgroud)
主要问题是我不能使用+和-符号作为他们真正代表的函数的引用,因为我可以使用lisp.任何人都可以想出更优雅的方式来做这样的事情,或者我是否达到了语言界限?
显然,我可以这样做:
var aPlusAbsB = function(a,b) {
return a + Math.abs(b);
}
Run Code Online (Sandbox Code Playgroud)
,但这更像是一个思想实验,而不是一个实用的问题.
有没有什么方法可以引用JavaScript语言中的核心函数,就像它们是用户定义的一样?
这取决于你发现的lisp实现的哪些方面特别漂亮.我会提出你的建议的另一个版本,我认为通过做一些肮脏的事情,最终会更接近你的lisp定义的语法.
// Give ourselves + and - functions to level the playing field with lisp.
Number.prototype['+'] = function(x)this+x;
Number.prototype['-'] = function(x)this-x;
// Now we can have some fun.
var aPlusAbsB = function(a,b) a [b > 0 ? '+' : '-'] (b);
// Some other notable language barrier differences, but not too dissimilar?
// (define (a-plus-abs-b a b) ((if (> b 0) + -) a b))
Run Code Online (Sandbox Code Playgroud)