Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
K out on N实现-SML_Sml_Smlnj_Ml - Fatal编程技术网

K out on N实现-SML

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) 问题与您的怀疑有关–基本情况

我试图在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 (_, []) = []