在JavaScript中实现Lisp的缺点

时间:2014-09-05 09:27:05

标签: javascript functional-programming lisp

我试图翻译Lisp代码(在Abelson/Sussman MIT course中找到)

(define (cons a b)
    (lambda (pick)
        (cond ((= pick 1) a)
              ((= pick 2) b))))

(define (car x) (x 1))

(define (cdr x) (x 2))

(car (cons 2 4))

到JavaScript(fiddle

function cons(a, b){
    return function(x){
        if(x === 1){
            return a;
        }
        else if(x === 2){
            return b;
        }
    }
}

function car(x){
    x(1);
}

function cdr(x){
    x(2);
}

console.log(car(cons(2,4)));

JavaScript中的结果是undefined。我已在调试器中跟踪它,虽然cons然后car返回所需的值,但当涉及到控制台(或警报或分配给变量)时,结果总是{{1 }}

在JavaScript中实现(或使用)这个的正确方法是什么?它有可能吗?

1 个答案:

答案 0 :(得分:0)

愚蠢的错误,我忘了回来:

function car(x){
    return x(1);
}

function cdr(x){
    return x(2);
}