This is written in an equational pseudocode. Assume that the cases are tried in order.
    numEven([])   = 0
    numEven(h::t) = 1 + numEven(t)    when isEven(h)
    numEven(h::t) = numEven(t)