У меня есть следующий код, но я не могу заставить его работать.Как только я помещаю цикл while внутрь корпуса, он возвращает единицу, независимо от того, что я изменяю в скобках.
case While(c, body) =>
while (true) {
eval(Num(1))
}
}
Как я могу сделать так, чтобы цикл while возвращал тип не Unit?
Я пытался добавить скобки вокруг моего условия while , но все равно он не выполняет то, что должен.
Есть указатели?
Обновление
Немного дополнительной справочной информации, поскольку я действительно не объяснил, что должен делать код, что представляется полезным, если я хочу получить некоторую помощь;
Я определилeval(exp : Exp)
.Это оценит функцию.Exp
- абстрактный класс.Расширен несколькими классами, такими как Plus
, Minus
(несколько основных операций) и IfThenElse(cond : Exp, then : Exp, else : Exp)
.И последнее, но не менее важное: While(cond: Exp, body: Exp)
.
Пример того, как его следует использовать;
eval(Plus(Num(1),Num(4))
приведет к NumValue(5)
.(Оценка Num (v: Value) приводит к NumValue (v). NumValue расширяет Value, который является другим абстрактным классом).
eval(While(Lt(Num(1),Var("n")), Plus(Num(1), Var("n"))))
Lt(a : Exp, b : Exp)
возвращает NumValue(1)
, если a