写ML功能

时间:2017-11-15 03:37:17

标签: sml smlnj

我是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);

1 个答案:

答案 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模式_匹配包含两个元组的列表,其中一个是空的,并且其他不是,并引发例外。