memoized evaluate