У меня проблема с сопоставлением с образцом в программе sml. Мой код такой:
fun ff (arr, _, [], _) = []
|ff (arr, 0, (x::xs), ping_list) =ping_list
|ff (arr, K, (x :: xs), ping_list) =
(if Array.sub(arr, x)-1 < 1
then ff(arr, (K-1), xs, (ping_list@[x]))
else ff(arr, K, xs, (ping_list@[x])))
Как вы можете видеть после прохождения третьего случая сопоставления с образцом, возможно, что и K будет 0, а третий список аргументов будет []. В этом случае после выполнения некоторых тестов он выбирает первый шаблон и возвращает [].
Как я могу управлять этим? В случае, когда K = 0 и xs пустые, я хотел бы, чтобы выполнялся второй шаблон, и ping_list был результатом, но я также хотел бы понять, как обрабатываются угловые случаи, подобные этому по sml.
Заранее спасибо