【发布时间】:2017-12-31 01:35:24
【问题描述】:
我试图在 SML 中实现 k-out-of-N,因此“pick(3,[1,2,3,4])”将返回 [[1,2,3],[1,3, 4]...](从 N 个元素中挑选出所有的 K 尺寸)
我使用了 List.map,我认为它会调用该函数并将其应用于每个元素。
实在想不通为什么在输入 "pick(3,[1,2,3,4,5])" 时,例如返回一个空列表。
我的第一个想法是,这是因为最初的条款(选择 (_,[]) = []) 但是改变它也没有奏效。
签名没问题(val pick = fn : int * 'a list -> 'a list list)。
fun pick (_,[]) = []
| pick (0,_) = []
| pick (n,hd::tl) =
let
val with_hd = List.map (fn x => hd::x) (pick(n-1,tl))
val without_hd = pick(n,tl)
in
with_hd@without_hd
end;
【问题讨论】: