Я хочу написать функцию, которая принимает последовательность <1,1,2,2,3> и возвращает последовательность с равными элементами, сгруппированными как << 1,1>, <2,2>, <3> >.
Я использую последовательности, а не списки, но некоторые функции похожи. Вот некоторые из функций, которые я собираюсь использовать: отображение, уменьшение, табулирование, фильтрация, добавление и т. Д.
Reduce принимает ассоциативную функцию и возвращает последовательность, "уменьшенную" этим оператором. Итак, уменьшаем оп + 0 <1,2,3> = 6.
Моей первой мыслью было использовать карту, чтобы поднять последовательность на один уровень.
Итак, <1,1,2,2,3> => << 1>, <1>, <2>, <2>, <3 >>.
Затем я подумал об использовании Reduce, в котором я создаю функцию, которая принимает пары элементов, таких как (x, y). Если x == y, тогда я возвращаюсь, я ничего не делаю. Но ... это не совсем работает, так как функция должна возвращать что-то одинакового типа в обоих случаях.
Может кто-нибудь дать мне несколько советов о том, как выбрать правильный путь, например, какие функции более высокого порядка я мог бы использовать? Я использую SML, но я не прошу, чтобы кто-нибудь дал мне полный ответ, так что любые советы высокого уровня будут оценены (честно на любом функциональном языке)