我想在SML上做一个函数,它反转第一个列表,然后与第二个列表连接(有些像:list1 = [5,3,1]和list 2 = [6 7 8],然后是inv (list1,list2)= [1,3,5,6,7,8]。) 这是代码:
fun inv (nil,nil) = []
|inv (ha::ta,hb::tb) =
if ha = [] then ta::(hb::tb)
else ha::inv(ta,hb::tb);
它返回:
错误:if分支的类型不一致[循环] 然后分支:''Z列表清单 else分支:''Z列表 在表达中:
如果ha = nil则ta :: hb :: tb else ha :: inv(ta,::)
有人可以帮我这个吗?
答案 0 :(得分:4)
fun inv ([], b) = b
| inv (h::t, b) = inv(t, h::b)
请注意,您不需要在第二个列表上进行模式匹配。这是尾递归函数的典型示例;它是使用常量堆栈空间反转列表的方法。你错误是使用cons(::),其中第一个参数类型'列表。
答案 1 :(得分:0)
由于您正在使用列表,如果ha = [],则list1中没有其他术语。