2017-01-31 12 views
0

У меня есть список и значение, как я могу вставить элементы списка в новый список, пока сумма этих элементов не превысит этого значения?SML: Как вставить элементы списка в новый список с условиями?

Вопрос в том, как вернуть вышеупомянутый новый список и первоначальный список без элементов нового списка?

Например, у меня есть список [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 
+0

к примеру у меня есть list [13,8,7,6,4,2,2,1] и значение 21. Итак, я хочу вставить элементы этого списка в новый список, сумма которого меньше или равна 21. в этом примере новый список будет [13,8], а 13,8 должны быть удалены из первоначального списка. поэтому окончательный вывод функции должен состоять из двух списков: [13,8], [7,6,4,2,2,1]. –

+0

Было бы яснее, если бы вы могли включить ваш комментарий как часть вашего вопроса. – afxentios

ответ

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] 

 Смежные вопросы

  • Нет связанных вопросов^_^