Создать список с данными, извлеченными из списка кортежей - тип вопроса - PullRequest
0 голосов
/ 21 февраля 2019

Мои данные упорядочены следующим образом:

([(x1,y1,z1);(x2,y2,z2);(x3,y3,z3);........;(xn,yn,zn)], e:int)

Пример: я пытаюсь создать список [x1;x2;x3;....;xn;e], где значение найдено только один раз.

Я начал следующий код, ноЯ столкнулся с проблемой с типом.

    let rec verifie_doublons_liste i liste = match liste with
        | [] -> false
        | head::tail -> i = head || verifie_doublons_liste i tail

    let rec existence_doublon liste = match liste with
        | [] -> false
        | head::tail -> (verifie_doublons_liste head tail) || 
            existence_doublon tail

    let premier_du_triplet (x,y,z) = x
    let deuxieme_du_triplet (x,y,z) = y
    let troisieme_du_triplet (x,y,z) = z

    let rec extract_donnees l = match l with
        | [] -> []
        | (x,y,z)::r -> (extract_donnees r)@@(x::z::[])


    let arrange donnees = match donnees with
        | [],i -> i::[]
        | (x,y,z)::[],i -> x::z::i::[]
        | (x,y,z)::r,i -> (extract_donnees r)@@(x::z::i::[])

1 Ответ

0 голосов
/ 21 февраля 2019

По сути, вы хотите извлечь первые элементы из списка кортежей и добавить в конце элемент e.

Самый простой способ - использовать List.map для извлеченияпервые элементы

List.map premier_du_triplet

- это функция, которая берет список из трех кортежей и извлекает первый элемент каждого из них.

, затем вы можете добавить элемент e в конце, используяОператор "@".

Более эффективный и информативный способ заключается в непосредственном написании рекурсивной функции, скажем f , которая выполняет именно то, что вам нужно.

При написании рекурсивной функции вам нужно задать себе две вещи

  • что она делает в простейшем случае (здесь, что делает f []?)
  • когда у вас есть список в формате head :: tail, и вы уже можете использовать f на хвосте, что вы должны сделать, чтобы head и tail получить (f (head :: tail))?

Имея эту информацию, вы сможете написать рекурсивную функцию, которая делает то, что вы хотите, используя шаблон matching

здесь самый простой случай -

| [] -> [e]

(вы просто добавляете e в конце)

, а общий случай

| h::t -> (premier_de_triplet h)::(f t)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...