JavaScript

Калькулятор из функций

Нашел интересную задачку и совершенно не понимаю как это делать, но очень интересено посмотреть решение, и если вдруг у вас есть интерессная ссылка или статья про такие вот фишки с функциями буду благодарен если поделитесь
1)Для каждого числа должна быть своя функция, т. е. от 0 (“zero”) до 9 (“nine”);
2)Должна быть функция для каждой из следующих математических операций: plus, minus, times (умножение), dividedBy (деление);
3)Самая внешняя функция представляет собой левый операнд, самая внутренняя функция представляет собой правый операнд;
4)По возможности пользоваться стрелочными функциями;
Пример:
1)Вызов:
seven(times(five()));
Результат:
Результат: 7 * 5 = 35

2)Вызов:
four(plus(nine()));
Результат:
Результат: 4 + 9 = 13
Rustem Orakpaev
Rustem Orakpaev
86
Я бы делел через структуры оператор-операнд. Примерчик на c#:

public class Operation
{
public enum OpType { Load, Add, Subtract, Multiply, Divide}
public double Operand;
public OpType Operator;
public Operation(double _Operand, OpType _Operator)
{
Operand = _Operand;
Operator = _Operator;
}
public override string ToString()
{
return Operand.ToString();
}
}

public class Calc: IDisposable
{
private Operation PerformOp(Operation _Op1, Operation _Op2)
{
switch(_Op1.Operator)
{
case Operation.OpType.Add: return new Operation(_Op1.Operand + _Op2.Operand, Operation.OpType.Load);
case Operation.OpType.Multiply: return new Operation(_Op1.Operand * _Op2.Operand, Operation.OpType.Load);
case Operation.OpType.Divide: return new Operation(_Op1.Operand / _Op2.Operand, Operation.OpType.Load);
case Operation.OpType.Subtract: return new Operation(_Op1.Operand - _Op2.Operand, Operation.OpType.Load);
}
return _Op1;
}

public Operation One(Operation _Op1 = null)
{
if (_Op1 == null)
return new Operation(1, Operation.OpType.Load);
return PerformOp(_Op1, new Operation(1, Operation.OpType.Load));
}

public Operation Two(Operation _Op1 = null)
{
if (_Op1 == null)
return new Operation(2, Operation.OpType.Load);
return PerformOp(_Op1, new Operation(2, Operation.OpType.Load));
}

public Operation Plus(Operation _Op1)
{
return new Operation(_Op1.Operand, Operation.OpType.Add);
}

public Operation Times(Operation _Op1)
{
return new Operation(_Op1.Operand, Operation.OpType.Multiply);
}

public void Dispose()
{

}

}
class Program
{
static void Main(string[] args)
{
using (Calc c = new Calc())
{
Console.WriteLine(c.Two(c.Times(c.One(c.Plus(c.Two())))));
}
Console.ReadKey();
}
}
Фаниль Муллагулов
Фаниль Муллагулов
92 772
Лучший ответ
Mr. Romantick .... Открою вам секрет, чтобы не было этого уродства с нижними подчёркиваниями, нужно для обращения к переменным класса использовать this, а аргументы функций вызывать без this.
public Operation(double Operand, OpType Operator) {
this.Operand = Operand;
this.Operator = Operator;
}
Раз вы нормальные ответы "не считаете полезными", то не обессудьте... Лично я вам отвечать больше никогда не буду. И других к этому призываю
*** Taizhanov.n***
*** Taizhanov.n***
65 176
человек столько трудился писал все это а вы его вопрос вообще убрали.