我是ML的新手所以我正在尽力去理解。
编写一个名为alternate : 'a list -> 'a list
的ML函数,它将两个具有相同长度的列表作为输入,并生成一个输出列表,其元素分别从第一个和第二个输入列表中取出。
示例
alternate ([1,3,5],[2,4,6]) = [1,2,3,4,5,6]
这是我的工作:fun alternate ( x::xs,y::ys) = x::alternate(x,y);
答案 0 :(得分:1)
您将问题分成两部分:递归案例和基本案例。 (1)在递归的情况下,你解决了问题的某些单元,在这种情况下,在结果前面的每个列表中放置一个元素,并递归地尝试解决问题的其余部分。同样的时尚。 (2)在基本情况下,列表为空,结果为空列表。
fun alternate (x::xs, y::ys) = x::y::alternate(xs, ys)
| alternate ([], []) = []
| alternate _ = raise Fail "xs and ys don't have the same length"
(3)因为函数只是为偶数长度的输入定义良好,所以catch-all模式_
匹配包含两个元组的列表,其中一个是空的,并且其他不是,并引发例外。