SML:如何将条件的元素插入到具有条件的另一个新列表中?

时间:2017-01-31 08:21:13

标签: sml smlnj

我有一个列表和一个值,如何将列表元素插入新列表,直到这些元素的总和不超过该值?

问题是如何在没有新列表元素的情况下返回上述新列表和初始列表?

例如,我有一个列表[13,8,7,6,4,2,2,1]和一个值21。所以,我想将该列表的元素插入到一个新列表中,其中总和为less than or equal to 21。在此示例中,新列表将为[13,8],并且必须从初始列表中删除13,8

所以函数的最终输出应该是两个列表:[13,8][7,6,4,2,2,1]

我已经编写了这段代码,但它有一些令人困惑的错误:

fun Scheduler (w:Wopt , L:PTList)=
    let
      val ptl1=[List.hd L]
      val TempL=L
      val head=List.hd L
    in
      if ListSum(ptl1) = w
      then (ptl1, Delete(L))
      else (
        if ListSum(ptl1) + head <= w 
        then Scheduler(Insert(head,ptl1), Delete(TempL))
        else (ptl1,Delete(L))
      ) 
    end

1 个答案:

答案 0 :(得分:1)

fun splitFor n [] = ([], [])
  | splitFor n (x::xs) =
    if x > n then ([], x::xs) else
    let val (ys, zs) = splitFor (n - x) xs
    in (x::ys, zs) end

(* Example *)
val (a, b) = splitFor 21 [13,8,7,6,4,2,2,1]