evaluate uses stack instead of replace list elements