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

SML: How to insert elements of a list to another new list with conditions?

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

问题是如何return前面提到的没有新列表元素的新列表和初始列表?

例如,我有一个列表 [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
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]