Если вы посмотрите документацию о том, что сгиб карты делает : (f kN dN ... (f k1 d1 a)...)
, вы увидите, что он фактически выполняет левое сгибание (где слева - наименьшая клавиша, а право - самый большой ключ).
Для карты или набора, который является бинарным деревом поиска, довольно легко обойти его в обоих направлениях, в отличие от (односвязного) списка, который можно просматривать только в одном направлении; поэтому одинаково легко делать хвост-рекурсивные сгибы в обоих направлениях.
Что касается порядка аргументов, я думаю, это просто дизайнерское решение. Сгибы списка Хаскелла (foldl
и foldr
), а также Карты Хаскелла fold
последовательно имеют аргумент начального значения перед аргументом списка. Я думаю, что последовательность хорошая. Сгибы списка OCaml в разных направлениях имеют разные порядки аргументов (я думаю, это может быть потому, что для левого сгиба вы помещаете начальный аргумент слева, а прогрессивный «сгибаете» его вправо по списку, тогда как для правого сгиба вы кладете начальный элемент справа и постепенно сгибайте его слева над списком, поэтому размещение аргументов визуально согласуется с действием.) Очевидно, порядок аргументов сгиба в Map в OCaml такой же, как и у правого сгиба. Я не думаю, что это действительно имеет значение.
Что касается наличия двух сгибов карты, это может иметь определенную ценность. Карта Хаскелла представила оба направления фолдинга в GHC 6.12. Раньше была только правильная складка. Однако большинство случаев использования сгиба на карте, вероятно, не заботится о порядке.