实现基本的数组操作。
在函数式语言中,像length、map和reduce这样的数组操作非常常见。
请实现一系列基本的数组操作,不要使用现有的函数。
需要实现的操作的具体数量和名称会因你所在的编程语言轨道而异,以避免与现有名称冲突,但你将要实现的一般操作包括:
append(给定两个数组,把第二个数组中的所有元素添加到第一个数组的末尾);concatenate(给定一系列数组,把所有数组中的所有元素合并成一个扁平数组);filter(给定一个谓词和一个数组,返回所有满足 predicate(item) 为 True 的元素组成的数组);length(给定一个数组,返回其中元素的总数);map(给定一个函数和一个数组,返回对每个元素应用 function(item) 所得结果组成的数组);foldl(给定一个函数、一个数组和一个初始累加器,从左到右把每个元素折叠(归约)进累加器);foldr(给定一个函数、一个数组和一个初始累加器,从右到左把每个元素折叠(归约)进累加器);reverse(给定一个数组,返回一个包含所有原元素、但顺序相反的数组)。注意,传给折叠函数(foldl、foldr)的实参顺序很重要。
上面关于本练习的说明由所有 Exercism track 共用。
为了与 Elixir 的标准库保持一致,foldl 和 foldr 所用函数的第一个实参应该是元素,第二个实参应该是累加器。
此外,为了避免与自动导入的函数Kernel.length/1冲突,用于计算长度的函数将改名为count。
本练习的一个或多个测试被标记为:slow,因为它们可能需要很长时间才能完成。因此,平台上的自动化测试运行器不会运行这些测试。如果你直接在平台的网页编辑器中解这道练习,不妨考虑把这门练习下载到自己的电脑上,这样你就能运行所有测试,并检查解答的效率。