我无法弄清楚我在这里失踪的是哪种情况,对于我的功能,有人可以帮我找到哪种情况也要考虑,这样我就不会得到比赛非详尽的错误。我需要时间来真正想到缺少哪一部分。
fun eval_1 (nil,_) = nil
| eval_1 (_,nil) = nil
|eval_1 ((x::h::xs),(y::t::ys)) = if x = ~1 then (h,t)::eval_1(xs,ys) else(x,y)::eval_1(h::xs,t::ys);
fun eval_2 (nil,_) = nil
| eval_2 (x,nil) = nil
|eval_2 ((x),(y::ys)) = eval_1 (x,y)::eval_2(x,ys);
fun eval_3 (nil,_) = nil
| eval_3 ((x::nil),nil) = nil
| eval_3 ((x::xs),(ys)) = eval_2(x,ys)::eval_3(xs,ys);
答案 0 :(得分:2)
匹配(x:xs, y:ys)
代替((x::h::xs),(y::t::ys))
摆脱了非详尽的警告。要使代码的其余部分等效,您可以使用hd
中的tl
和List
来获取尾部的尾部和尾部的尾部,而不是使用{{1来分解列表}}
x::next::xs
示例运行:
fun eval_1 (nil,_) = nil
| eval_1 (_,nil) = nil
| eval_1 (x::xs, y::ys) = if x = ~1 then (hd xs, hd ys)::eval_1(tl xs, tl ys) else (x,y) :: eval_1(xs, ys)
fun eval_2 (nil,_) = nil
| eval_2 (x,nil) = nil
| eval_2 ((x),(y::ys)) = eval_1 (x,y)::eval_2(x,ys);
fun eval_3 (nil,_) = nil
| eval_3 ((x::nil),nil) = nil
| eval_3 ((x::xs),(ys)) = eval_2(x,ys)::eval_3(xs,ys);