我正在尝试创建一个函数,对ML列表的数字进行平方,然后将这些数字添加到
django-taggit
我所拥有的是一个列表,并返回每个数字的平方列表,但我无法弄清楚添加部分。
答案 0 :(得分:1)
您可以一次解决一个子问题并撰写结果:
val sq = map (fn x => x*x)
val sum = foldl (fn (x, result) => x + result) 0
val sqsum = sum o sq
或者您可以将map
和foldl
融合在一起:
val sqsum = foldl (fn (x, result) => x*x + result) 0
或者您可以使用递归定义编写此函数:
fun sqsum (x::xs) = x*x + sqsum xs
| sqsum [] = 0
并最终将其改进为尾递归:
fun sqsum L =
let fun f (x::xs) result = f xs (x*x + result)
| f [] result = result
in f L 0 end
即使像map
和foldl
这样的高阶列表组合器非常有用并且一旦习惯了它们就提高了代码的可读性,使用手动递归解决入门练习对于学习非常有价值处理;毕竟,map
和foldl
是以这种方式构建的。