评估条件表达式

时间:2016-02-19 10:38:03

标签: javascript

我正在尝试编写一个递归算法来计算类型的表达式:operator variable和返回true/false的函数。

 [A] = [B] - [c]
 functionA(1,2) = functionB(3,4,5)
 functionA(functionC(a,b)) = functionB(3,4,5)

问题在于我不知道如何启动以及使用什么方法。我可以使用堆栈或任何东西 我试图在 Javascript 中执行此操作。

欢迎任何逻辑/想法。

1 个答案:

答案 0 :(得分:0)

也许你正在寻找这个,一组函数和基于堆栈的RPN风格的命令迭代。

在输出中,您可以看到实际的命令和堆栈。



var $ = {
        '===': function (b) { return function (a) { return a === b; }; },
        '+': function (b) { return function (a) { return a + b; }; },
        '-': function (b) { return function (a) { return a - b; }; },
        '1/x': function (a) { return 1 / a; },
    },
    commands = [3, 2, '+', 9, 4, '-', '==='],
    result = commands.reduce(function (stack, command) {
        var temp;
        if ($[command]) {
            temp = $[command];
            while (typeof temp === 'function') {
                temp = temp(stack.pop());
            }
            stack.push(temp);
        } else {
            stack.push(command);
        }
        document.write('<pre>' + command + ': ' + JSON.stringify(stack, 0, 4) + '</pre>');
        return stack;
    }, [])[0];

document.write(result);
&#13;
&#13;
&#13;