Sml 写ML函数

Sml 写ML函数,sml,smlnj,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) 在递归的情况下,您可以解决问题的某个单

我是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) 在递归的情况下,您可以解决问题的某个单元,在这种情况下,将每个列表中的一个元素放在结果前面,然后递归地尝试以相同的方式解决问题的其余部分。(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模式将匹配包含列表的两个元组,其中一个为空,另一个为空,并引发异常。

来自:3。要求家庭作业帮助的问题必须包括到目前为止您为解决问题所做工作的摘要,以及您解决问题的困难的描述。您给出的类型签名(
备选:'a list->'a list
)与问题的其余部分不匹配(似乎是关于(
alternate:'a list*'a list->'a list
)。无论如何,这里有一个提示:递归案例可能涉及两个参数的顺序交换,因此在一次调用中扮演
x
角色的将在下一次调用中扮演
y
角色,反之亦然。感谢您的详细解释