1) Вы можете использовать оператор cons во время выполнения, он просто возвращает новый список, а не изменяет список ввода.
2) Типы классов в OCaml используют «структурный» подтип, а не «номинальный» подтип в стиле Java. Предполагаемый тип arrayOfDogs
будет «объектом с методом с именем bark
типа unit -> unit
(не обязательно dog
)». Например:
# class cat = object
method bark = print_endline "meow"
end ;;
class cat : object method bark : unit end
# let c = new cat ;;
val c : cat = <obj>
# c :: arrayOfDogs ;;
- : cat list = [<obj>; <obj>; <obj>; <obj>]
3) Проблема с arrayOfDogs :: c3
в том, что вы неправильно поняли. Тип ::
является 'a -> 'a list -> 'a list
. Чтобы добавить c3
в начале, используйте
c3 :: arrayOfDogs
Чтобы добавить его в конец, используйте оператор "append" @
arrayOfDogs @ [c3]