Sml 我想将一个列表拆分为奇偶元素的元组
大家好,我是编程新手,我在做一个学习和享受的问题。在这一点上我有点不知所措。。问题来自使用Sml 5.9编程的介绍 我想拆分Sml 我想将一个列表拆分为奇偶元素的元组,sml,Sml,大家好,我是编程新手,我在做一个学习和享受的问题。在这一点上我有点不知所措。。问题来自使用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]; 从中我得到: [(
[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个元素,则该函数不起作用。也许我需要一个助手函数来对列表中的偶数和奇数元素进行排序?我希望有人能帮我找到正确的方向,在那之前我会继续努力。我会尽量不放弃太多,但这里有一些提示:
- 您需要两个基本案例—一个用于
,一个用于[]
[x]
- 您的一般案例只需要处理两个元素,而不是四个元素(将一个元素放在第一个列表中,将一个元素放在第二个列表中)
- 目前,您得到的是
返回的是一个列表,而不是一个元组。第一个基本案例的结果应该是split
([],[])
- 在一般情况下,递归的
将返回一个元组splitxs
。您需要提取这些值,并根据(ys,zs)
、ys
、zs
和x1
构建结果元组x2
- 您一次只需要处理两个元素-一般情况下应该是拆分x1::x2::xs
由一般情况处理-不需要另一个基本情况split[x,y]
- 你错过了递归调用!元素最终出现在两个列表中,因为您将
直接放在输出的两半中-您需要先拆分它。从xs
let(ys,zs)=在…中拆分X
解决了它。。。不完全确定如何lol,需要更多的练习来掌握它。没有指针是不可能做到的。。。非常感谢尼克·巴恩斯的帮助 欢迎光临!为了使您的问题和代码更具可读性,请尝试在文章中使用一些格式。代码可以通过在每行前放置4个空格字符来格式化(或者通过高亮显示所有字符并按下编辑栏上的“代码”按钮)。对于高亮显示tipI,很多人以前从未使用过这种语言,但是如果你可以根据数组索引进行拆分,你可以使用类似(index mod 2)或indexA-(indexA>>1)的东西==指数-1.Thx 100倍。。这就把事情弄清楚了一点。我将在凌晨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], [])