Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def evalChained(expr: Expr, references: Map[String, Signal[Expr]], seen: Set[String]): Double = {
- expr match {
- case Literal(v) => v
- case Ref(name) => references.contains(name) match {
- case true => seen.contains(name) match {
- case false => evalChained(references(name)(), references, seen + name)
- case true => Double.NaN
- }
- case false => Double.NaN
- }
- case Plus(a, b) => evalChained(a, references, seen) + evalChained(b, references, seen)
- case Minus(a, b) => evalChained(a, references, seen) - evalChained(b, references, seen)
- case Times(a, b) => evalChained(a, references, seen) * evalChained(b, references, seen)
- case Divide(a, b) => evalChained(a, references, seen) / evalChained(b, references, seen)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement