Maple计算机代数系统有一个命令seq(f, i = m..n, step)
,它返回序列fm
,…fn
,其中fi
是表达式f
,其中符号i
的所有出现都用m
到n
的整数序列中的i
的数值代替。实现一个方案函数(seq f (start step end))
,并生成一个值列表(f(start)
, f(start+step)
,…), f(start+n*step)
),其中n是最大的整数,使得start+n*step <= end
和start+(n+1)*step > end
。
我认为这将工作:(seq (lambda (x) (* x x)) '(0 2 7))
=> (0 4 16 36)
基本解决方案是实现iota
和map
,并将两者结合起来:
-
iota
生成给定起始,停止和步长的数字列表 -
map
对给定列表中的所有元素调用给定函数,并返回一个包含返回值的新列表
您必须编写这些函数,但是一旦编写好了,您的seq
函数就是将两者拼接在一起的简单问题。