2016-02-19 2 views
-2

Я пытаюсь написать рекурсивный алгоритм, который вычисляет выражение типа: operatorvariable и функции, которые возвращают true/false.Оценка условных выражений

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

Проблема в том, что я не знаю, как начать и какой метод использовать. Я могу использовать стек или что угодно.
Я пытаюсь сделать это в Javascript.

Любая логика/идея приветствуются.

+0

возможно добавить несколько (больше) примеры и применить некоторые ... –

+1

появляются две вопрос совершенно неясно, трудно получить его на самом деле. – Jai

+0

Мне нужно оценить выражение, чтобы найти результат: true/false. например, 2 = 1 + 1 переменные могут быть также функцией. Функция может возвращать значение. Как здесь 2 может быть функцией say FunctionA (arg1, arg2) .So FunctionA (arg1, arg2) = 1 + 1. Вот так возвращается true, если результат оценки функции равен 2 и 1 + 1 результат также равен 2. –

ответ

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);

Смежные вопросы