Как получить доступ к элементам в определениях типов OCaml - PullRequest
0 голосов
/ 03 марта 2020

Определение в OCaml:

    type 'a tree =
        Leaf
       |Node of 'a * 'a tree * 'a tree;;
    type 'a comparisonfn = 'a -> 'a -> int
    type 'a ptree = 'a comparisonfn * 'a tree

с использованием этого значения в полиморфе c BST, где ptree - это дерево с функцией сравнения для любого типа, используемого в дереве

как мне получить доступ к каждому типу из ptree?

1 Ответ

1 голос
/ 03 марта 2020

Трудно ответить на ваш вопрос, потому что не ясно, о чем вы спрашиваете. Тип 'a ptree является параметризованным типом. Внутри определения ptree параметр имеет имя 'a.

Функция для обработки такого дерева будет выглядеть примерно так:

let myfun ptree =
    let (cfun, tree) = ptree in
        (* Call the comparison function under the name cfun *)
        (* Access the tree itself under the name tree *)

Единственный способ написать такое функция полиморфно , т. е. она должна делать одно и то же независимо от типа параметра 'a. Поэтому вам не нужно ссылаться на тип в любом месте кода.

Вы можете ссылаться на него, если хотите, присваивая тип ptree и другим переменным в вашем коде. Как правило, в этом нет необходимости, но если вы хотите сделать это, это может выглядеть примерно так:

let myfun2 (ptree : 'a ptree) =
    let (cfun, tree : 'a comparisonfn * 'a tree) = ptree in
        (* Same as above, but you have the name 'a for the type *)

Надеюсь, это поможет хоть немного прояснить ситуацию.

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