我需要
编写separate
类型的函数int * 'a * 'a list -> 'a lst
separate (k, x, l)
返回在列表x
的每个k
元素之后插入元素l
的列表(从
列表的结尾)。例如,separate (1, 0, [1,2,3,4])
应该返回[1,0,2,0,3,0,4]
和
separate (3, 0, [1,2,3,4])
应该返回[1,0,2,3,4]
。
到目前为止,这就是我所拥有的,但它导致了错误。任何人都可以帮助我吗?
fun separate (k: int, x: 'a, l: 'a list) : 'a list =
let val count:int = k
in foldr(
(fn (h, t) =>
if count = 0
then count := 1 in
x::h::t
else count = count + 1 : int
h::t
)
答案 0 :(得分:0)
实际上,逻辑是正确的,但是由于不可变性,应该通过将更改的状态传递到foldr
的另一个迭代中来实现:
fun separate (k: int, x: 'a, l: 'a list) : 'a list =
#2 (foldr (fn (h, (count, t)) =>
if count = 0
then (k - 1, h::x::t)
else (count - 1, h::t)
) (k, []) l);
因此,我们不使用元组count
(其中foldr
是(k, [])
和{的初始值)来初始化k
作为变量。 {1}}是结果列表),然后在迭代的每个步骤中减少计数。