据我所知,使用 Scheme 在函数式编程中教授迭代结构的通常(也是我认为最好的)顺序是首先教授递归,然后可能会进入诸如 map、reduce 和所有 SRFI-1 过程之类的东西。我猜这可能是因为通过递归,学生拥有迭代所需的一切(如果他/她想这样做,甚至可以重写所有 SRFI-1)。
现在我想知道是否曾经尝试过相反的方法:使用 SRFI-1 中的几个过程,并且只有当它们还不够时(例如,逼近一个函数)才使用递归。我的猜测是结果不会很好,但我想知道过去使用这种方法的任何经验。
当然,这不是特定于 Scheme 的;这个问题也适用于任何功能语言。
Dave Touretsky 的COMMON LISP: A Gentle Introduction to Symbolic Computation是一本在递归之前教授“应用程序编程”(组合器的使用)的书——但是,这是一本 Common Lisp 书,他可以在此之前教授命令式循环。