大家好我很喜欢编程,我正在为学习和享受做一个问题。我有点卡在这一点..问题来自Introduction to Programming using Sml 5.9
我想拆分[x1, x2, x3, ... ,xn] = ([x1, x3,....], [x2, x4,...])
这是我到目前为止所做的:
fun split [] = []
| split (x1::x2::x3::x4::xs) = ([x1, x3], [x2, x4])::split xs
val test1split = split [1, 1, 2, 3];
从此我得到:
[([1, 2], [1, 3])]
....(我想要一个包含拆分列表的元组,而不是显然)
如果有超过4个元素,则该功能不起作用。也许我需要一个辅助函数来首先对列表中的偶数和奇数元素进行排序?我希望有人可以帮我跟踪正确的方向,直到那时我一直在努力。
答案 0 :(得分:4)
fun split [] = ([], [])
| split [x] = ([x], [])
| split (x1::x2::xs) =
let
val (ys, zs) = split xs
in
((x1::ys), (x2::zs))
end;
val test1split = split [1, 1, 2, 3, 5, 6] = ([1, 2, 5], [1, 3, 6])
val test2split = split [8, 7, 6, 5, 4, 3] = ([8, 6, 4], [7, 5, 3])
val test3split = split [8, 7] = ([8], [7])
val test4split = split [8] = ([8], [])
解决了......不完全确定lol怎么样,需要更多练习来掌握它。没有指针就不可能做到这一点......非常感谢Nick Barnes的帮助。
答案 1 :(得分:3)
我会尽量不要放弃太多,但这里有一些提示:
[]
,一个用于[x]
。split
返回了一个列表,而不是一个元组。您的第一个基本案例的结果应为([],[])
。split xs
将返回元组(ys,zs)
。您需要提取这些值,并根据ys
,zs
,x1
和x2
来构建生成的元组。(编辑)您修改后的解决方案有几点:
split x1::x2::xs
split [x,y]
由一般情况处理 - 不需要其他基本情况。xs
直接放入输出的两半 - 您需要先将其拆分。从中开始
let (ys, zs) = split xs in ...