function even(digit) { return parseInt(digit) % 2 === 0; } ometa Debugger { log_next = &anything:t {console.log(t)}, status = { console.log(this) } } ometa EvenOdd <: Debugger { even = ^digit:d ?(even(d)), odd = ^digit:d ?(!even(d)), digit :even = status apply(even), number = <(digit(#even) digit(#odd))+ digit(#even)? | digit(#even) >:n -> parseInt(n) } EvenOdd.matchAll("452", "number")