SML: фильтрация списка нерекурсивно

Я пытаюсь отфильтровать список нерекурсивно, но я не уверен, как это сделать. Для простого примера предположим, что у меня есть список [1, 2, 3, 4, 5, 6, 7], и я хочу его отфильтровать, чтобы он возвращал список чисел больше 3, т. е. [4, 5, 6, 7].

Я могу сделать это рекурсивно без проблем, но я застрял здесь. К сожалению, я новичок в sml, и лучшее, что я могу придумать, это использовать карту, но я не думаю, что карта была создана для этого.


person Rickkwa    schedule 17.02.2013    source источник


Ответы (2)


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

List.filter однако был создан для этого. Если вы вызовете List.filter с функцией в качестве аргумента, которая возвращает true, если число больше 3, она сделает именно то, что вам нужно.

person sepp2k    schedule 17.02.2013

Подсказка: попробуйте использовать foldr, а не map.

person Andreas Rossberg    schedule 17.02.2013