How can we help a forgetful learner learn multiple concepts within a limited time frame? For long-term learning, it is crucial to devise teaching strategies that leverage the underlying forgetting mechanisms of the learner. In this paper, we cast the problem of adaptively teaching a forgetful learner as a novel discrete optimization problem, where we seek to optimize a natural objective function that characterizes the learner's expected performance throughout the teaching session. We then propose a simple greedy teaching strategy and derive strong performance guarantees based on two intuitive data-dependent properties, which capture the degree of diminishing returns of teaching each concept. We show that, given some assumptions about the learner's memory model, one can efficiently compute the performance bounds. Furthermore, we identify parameter settings of the memory model where the greedy strategy is guaranteed to achieve high performance. We demonstrate the effectiveness of our algorithm using extensive simulations along with user studies in two concrete applications, namely (i) an educational app for online vocabulary teaching and (ii) an app for teaching novices how to recognize animal species from images.