Skip to content

Instantly share code, notes, and snippets.

@nomisRev
Last active July 23, 2017 14:07
Show Gist options
  • Save nomisRev/1debcabf110a2fe0a03794ebce2ea74c to your computer and use it in GitHub Desktop.
Save nomisRev/1debcabf110a2fe0a03794ebce2ea74c to your computer and use it in GitHub Desktop.
sealed class MathExpression {
fun eval(): Result = when (this) {
is Addition -> {
val resultL = left.eval()
when (resultL) {
is Failure -> resultL
is Success -> {
val resultR = right.eval()
when (resultR) {
is Failure -> resultR
is Success -> Success(resultL.value + resultR.value)
}
}
}
}
is Subtraction -> {
val resultL = left.eval()
when (resultL) {
is Failure -> resultL
is Success -> {
val resultR = right.eval()
when (resultR) {
is Failure -> resultR
is Success -> Success(resultL.value - resultR.value)
}
}
}
}
is Division -> {
val resultL = left.eval()
when (resultL) {
is Failure -> resultL
is Success -> {
val resultR = right.eval()
when (resultR) {
is Failure -> resultR
is Success -> if (resultR.value != 0) Success(resultL.value - resultR.value) else Failure("Division by zero")
}
}
}
}
is Number -> Success(value)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment