在递归前体验教学或学习地图/减少/等?

Jay*_*Jay 4 scheme haskell functional-programming sml

据我所知,在使用Scheme进行函数式编程时,通常(并且在我看来最好)教授迭代结构的命令是首先教授递归,然后可能会进入map,reduce和所有SRFI-1过程之类的东西.这可能是,我想,因为通过递归,学生拥有迭代所需的一切(如果他/她想这样做,甚至可以重写所有SRFI-1).

现在我想知道是否曾经尝试过相反的方法:使用SRFI-1中的几个过程,并且只有当它们不够时(例如,近似函数)才使用递归.我的猜测结果不会很好,但我想知道过去使用这种方法的经验.

当然,这不是Scheme特有的; 这个问题对任何功能语言都有效.

在递归之前教授"应用程序编程"(使用组合器)的一本书是Dave Touretsky的常见LISP:对符号计算的温和介绍 - 但是,它是一本Common Lisp书,他可以在此之前教授命令式循环.

Ara*_*raK 6

首先从基本知识块开始的IMO更好,然后得出结果.这就是他们在数学中所做的事情,即它们在乘法之前不引入取幂,而在加法之前不进行乘法,因为前者在每种情况下都来自后者.我已经看到一些教师反过来了,我相信它不像你从基础到结果那样成功.此外,通过推迟更高级的主题,您可以给学生一个心理挑战,使用他们已有的知识自己获得这些结果.