OCaml: ввод функции ('a *' b -> 'c) - PullRequest
2 голосов
/ 14 апреля 2011
let rec 

map2 (f : 'a * 'b -> 'c) (l1 : 'a list) (l2 : 'b list) : 'c list =
  match (l1,l2) with
    | ([], []) -> []
    | (x::l1),(y::l2) -> f (x, y)::(map2 f (l1, l2))

Возвращается:

Error: This expression has type 'a list * 'a list
   but an expression was expected of type 'a list

Что я здесь не так делаю ??

1 Ответ

10 голосов
/ 14 апреля 2011

Ошибка - map2 f (l1, l2) (как и сказала бы ошибка). Вы передаете (l1, l2) как кортеж, в то время как они должны быть отдельными параметрами карри: map2 f l1 l2.

Кроме того, ваша функция не обрабатывает случаи различной длины (шаблоны с одним списком пустым, но не с другим). В этом случае функция выдаст ошибку соответствия, возможно, вы захотите вызвать более специализированную ошибку, такую ​​как invalid_arg "map2" или что-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...