Q1: Compose All
实现compose-all函数,它接收一系列单参数函数,返回一个单参数函数将所有传入的函数应用在一起。...比如,如果func是对函数(f, g, h)调用compose-all的结果。...ok -q compose-all
答案
首先要确保返回的是一个只有一个参数的函数,但显然我们需要通过递归来遍历所有的funcs,那么就势必需要把funcs也作为参数,这和只有一个参数的设定矛盾了。...尾递归需要我们在函数的返回语句上不进行任何依赖当前运行环境的操作,最简单的办法就是把递归的结果也当做是函数的参数传入,这样就可以摆脱当前运行环境的依赖。...比如[2, 1, 3], [1, 3, 2], [3, 2, 1]都是list [1, 2, 3]的排列
实现permutations,一个生成器函数,它接收一个list,返回list的所有排列。