K out on N实现-SML
我试图在SML上实现N中取k,因此“pick(3,[1,2,3,4])将返回[[1,2,3],[1,3,4]…](所有k-size从N个元素中选择) 我使用了List.map,我认为它调用函数并将其应用于每个元素 真的不明白为什么在输入“pick(3,[1,2,3,4,5])”时,它返回一个空列表 我的第一个想法是,这是因为初始条件(选择(,[])=[])) 但是改变它并没有起到很好的作用 签名正常(val pick=fn:int*'a list->'a list)K out on N实现-SML,sml,smlnj,ml,Sml,Smlnj,Ml,我试图在SML上实现N中取k,因此“pick(3,[1,2,3,4])将返回[[1,2,3],[1,3,4]…](所有k-size从N个元素中选择) 我使用了List.map,我认为它调用函数并将其应用于每个元素 真的不明白为什么在输入“pick(3,[1,2,3,4,5])”时,它返回一个空列表 我的第一个想法是,这是因为初始条件(选择(,[])=[])) 但是改变它并没有起到很好的作用 签名正常(val pick=fn:int*'a list->'a list) 问题与您的怀疑有关–基本情况
问题与您的怀疑有关–基本情况是不正确的,因为它们总是生成空列表,而将
fn x=>hd::x
映射到空列表会生成空列表
从任何内容中选择零元素都应该成功,并生成空列表。也就是说,
选择(0,)=[[]]
——一个包含一个元素的列表,即空列表
您还需要重新排列案例,因为pick(n,[])
对n=0
成功,但对任何其他n
都不成功
总之
fun pick (0, _) = [[]]
| pick (_, []) = []
与函数的其余部分完全相同
fun pick (0, _) = [[]]
| pick (_, []) = []