int list -> int вместо 'a list ->' a - PullRequest
0 голосов
/ 29 марта 2019

Я новичок в ocaml (который я изучаю в школе), и в моем упражнении мне нужно написать функцию, которая дает минимум списка int. Я написал это:

let rec minimum liste =
    match liste with
    |[a] -> a
    |[a;b] -> if a<b then a else b
    |a::b::r -> if a<b then minimum (a::r) else minimum (b::r)
    ;;

Однако, ocaml говорит мне:

val minimum : 'a list -> 'a = <fun>

И, как я уже сказал, мне нужно val minimum : int list -> int = <fun> Не могли бы вы мне помочь, пожалуйста ? Спасибо!

1 Ответ

2 голосов
/ 29 марта 2019

Ваш код не делает ничего, что зависит от входных данных, принадлежащих к какому-либо конкретному типу. Таким образом, OCaml (более или менее правильно) предполагает, что он будет работать для списка любого типа.

Если хотите, вы можете ограничить типы параметров функции, указав их следующим образом:

 let f (x: type) = ...

Итак, вы можете сказать:

let rec minimum (liste: int list) = ...

(В качестве дополнительного комментария вы можете попробовать свою функцию в пустом списке, чтобы увидеть, что происходит.)

...