Lambdageek ответ для List.iter
правильный. Вам просто нужно использовать () в качестве результата в любом случае, когда вам нечего делать. Все различные случаи вашего match
выражения должны возвращаться (), когда вы выполняете итерацию. Вот что такое List.iter
.
Все остальные (на мой взгляд, справедливо) обеспокоены тем, что вы, возможно, не захотите использовать List.iter
. Это может быть первое, о чем вы думаете, когда пришли из других (императивных) языков, но итерация per se вовсе не так часто используется при функциональном программировании. Если вы изучаете OCaml по какому-либо курсу, даже менее вероятно, что вы захотите использовать List.iter
. Курс по OCaml определенно начнется с изучения функциональных частей. Чтобы мыслить функционально, вы хотите думать о преобразовании значений из одной формы в другую (то есть, применяя к ним функции).
Допустим, вы хотели использовать List.filter
. Затем, как вы говорите, вы в конечном итоге сделаете выражение match
, но вместо возврата () во всех различных случаях вы захотите вернуть логическое значение (true или false) в каждом случае. Если вы вернете true, значение будет включено в итоговый список. Если вы вернете false, значение не будет включено в итоговый список. Еще раз, это то, что List.filter
это все. Вот некоторый код, который возвращает новый список, содержащий только элементы данного списка, которые имеют конструктор Z.
let myFunc list =
List.filter
(fun x -> match x with Z _ -> true | _ -> false)
list
Я не уверен, что это помогает, но я думаю, что я пытаюсь сказать, что использование match
не сложно. Вам просто нужно охватить каждый случай. Это хорошо, вы хотите, чтобы ваш код работал во всех случаях!