Я хочу написать функцию, которая объединит все элементы в списке в OCaml. Достаточно просто, до сих пор у меня есть рабочая функция:Ошибка типа OCaml для списков
let rec comAll (f : 'a -> 'a -> 'a) (r : 'a) (l : 'a list) : 'a =
match l with [] -> r
| hd::tl -> let comAll2 = comAll f r tl in f hd comAll2
;;
Первый аргумент функции, то второе значение по умолчанию, чтобы вернуться, когда/если список ввода пуста, а третий аргумент сам список ,
Эта функция работает, как задумано, за исключением того, когда я пытаюсь вызвать его, используя другую функцию, например:
let inList (l : 'a list) (e : 'a) : bool = comAll (fun x y -> if x == e then true else y) false l ;;
, который будет проходить в виде функции, возвращая inList : bool list -> bool -> bool = <fun>
однако, я хочу вместо этого он вернется inList : 'a list -> 'a -> bool = <fun>
Я пробовал вместо этого определять comAll как: let rec comAll f r l =...
, и это работает, но я хочу объявить функцию с явными типами.
Любая помощь или руководство по поводу того, что я делаю неправильно здесь?
Хорошо, но для целей того, над чем я работаю, есть ли способ заставить его работать с ''a ->' a -> 'a'? – Jeremy
Нет, нет. Вы хотите передать функцию, которая не относится к типу ''a ->' a -> 'a'. –
Хорошо. Спасибо за помощь. Я думаю, теперь я понял – Jeremy