F #: объявить функцию и найти элемент в списке - PullRequest
0 голосов
/ 28 сентября 2019

Я довольно новичок в F # и мне нужна помощь с проблемой.У меня проблемы с поиском элемента в списке: «Объявить функцию findRoute: Lid * LuggageCatalogue -> Route, которая находит маршрут для данной идентификации багажа в каталоге багажа»

Я перечислил разныетипы и данные типы элементов.

    type Lid = string 
    type Flight = string
    type Airport = string
    type Route = (Flight*Airport) list
    let route = [("DL 189","ATL"); ("DL 124","BRU"); ("SN 733","CPH"); ("SK 208","ATL"); ("DL 124","BRU"); ("SK 122","JFK")]

    type LuggageCatalogue = (Lid*Route) list
    let lc = [("DL 016-914", [("DL 189","ATL"); ("DL 124","BRU"); ("SN 733","CPH")]); 
    ("SK 222-142", [("SK 208","ATL"); ("DL 124","BRU"); ("SK 122","JFK")])]


    let findRoute fr = function
    match fr with
    | [] -> printf "No match"
    |

Я застрял в том, что не могу найти правильный способ использования функции для поиска элементов в списке LuggageCatalogue

1 Ответ

0 голосов
/ 28 сентября 2019

Может быть, вы могли бы начать с фильтрации каталога багажа, чтобы лучше понять, что происходит, например,

let filterlist lid = List.filter (fun (luggageid, _) -> luggageid = lid)

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

filterlist "SK 222-142" lc

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

let findfirst lid =
  let rec checktail lctail =
    match lctail with
    | [] -> invalidArg "lid" "luggageid not present in catalogue"
    | (id, r)::tail -> if id = lid then r else checktail tail
  checktail lc
...