Итерация по спискам ocaml с условными выражениями - PullRequest
2 голосов
/ 10 марта 2012

Новое в ocaml, так что все, с чем я могу прийти - это псевдо.

Я хотел бы написать функцию, которая принимает список, а затем возвращает новый список только с нечетными целыми числами.

Итак, просто переберите список, возможно, используйте% 2, чтобы найти нечетные целые числа, и добавьте их в новый список.

Будучи новичком в ocaml, я просмотрел, что может быть полезноНапример, map, rev-map или iter, или, возможно, даже фильтр? .

Что лучше всего использовать и как его настроить?

1 Ответ

5 голосов
/ 10 марта 2012

Наиболее подходящей функцией является filter in Список модулей .Посмотрите на его подпись и описание:

val filter : ('a -> bool) -> 'a list -> 'a list

filter pl возвращает все элементы списка l, которые удовлетворяют предикату p.Порядок элементов в списке ввода сохраняется.

вы должны знать, как предоставить предикат для проверки нечетных целых чисел, как четко описано в вашем вопросе.

Еще одно менее изящное решениеis:

  • Просто выполните итерацию по списку и используйте список аккумуляторов для сбора результатов.
  • Если элемент является нечетным целым числом, добавьте его к аккумулятору.
  • Поменяйте местами аккумулятор, чтобы получить правильный порядок.

Это решение включает в себя List.fold_left для накопления результатов и List.rev для обращения к списку.

Поскольку вы спрашиваете толькофункции подходящие, надеюсь, вы сможете использовать их самостоятельно.

РЕДАКТИРОВАТЬ:

Поскольку вы поделились своей попыткой на List.filter, вот один из способовиспользуйте его:

let odds xs = List.filter (fun x -> x mod 2 <> 0) xs

Чтобы иметь возможность продвинуться дальше с OCaml, пожалуйста, уделите некоторое время, чтобы прочитать руководство по OCaml. Вики-тег OCaml содержит множество полезных ресурсов для начала работы.

...