У меня есть функция OCaml, которую я получил из поста: Список переворачивается в Ocaml
let rev_list l =
let rec rev_acc acc = function
| [] -> acc
| hd::tl -> rev_acc (hd::acc) tl
in
rev_acc [] l
Я проверил это, и это, очевидно, сработало, но я не понимаю, почему. Внутри основной функции при определении rev_acc
он говорит, что принимает только аргумент acc
. Однако при этом вызывается функция с двумя параметрами. Почему нам разрешено это делать?
Кроме того, почему мы говорим let rec rev_acc acc = function
, что означает «= функция», и почему мы не используем совпадение? Я предполагаю, что это связано с отсутствием необходимости указывать определенные аргументы; Я кое-что помню об этом в последней части курса, которая была кратко освещена. Это как-то связано с карри?
Извините, если это глупые вопросы; Я довольно новичок в функциональном программировании, если это не было очевидно.
Любая помощь очень ценится. Спасибо.