use memoize to memoize