Math F#:声明函数并在列表中查找元素
我对F#很陌生,需要一些帮助来解决一个问题。在列表中查找元素时遇到问题: 声明一个函数findurote:Lid*luggagecatalog->Route,用于在行李目录中查找给定行李标识的路线 我列出了不同的类型,并给出了类型元素Math F#:声明函数并在列表中查找元素,math,functional-programming,f#,computer-science,f#-interactive,Math,Functional Programming,F#,Computer Science,F# Interactive,我对F#很陌生,需要一些帮助来解决一个问题。在列表中查找元素时遇到问题: 声明一个函数findurote:Lid*luggagecatalog->Route,用于在行李目录中查找给定行李标识的路线 我列出了不同的类型,并给出了类型元素 type Lid = string type Flight = string type Airport = string type Route = (Flight*Airport) list let 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"
|
我陷入困境的地方是我找不到正确的方法来使用该功能查找
行李目录
列表中的元素也许您可以从筛选行李目录开始,以更好地了解发生了什么,例如
let filterlist lid = List.filter (fun (luggageid, _) -> luggageid = lid)
然后在目录中找到一个特定的项目
filterlist "SK 222-142" lc
或者更好的是,尝试自己创建函数的第一部分。尽管这只是第一步,但不妨尝试想象一下行李id的递归搜索函数的外观
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
问题似乎是您还没有真正编写任何代码。你应该试着这样做,然后带着一个更具体的问题回来,比如编译器错误或者它没有产生你期望的结果。请不要删除问题的关键部分。如果你在绕过一些反剽窃或反作弊工具时遇到困难,你真的应该在做这件事之前考虑到这一点。非常感谢你的回答!为接下来的几项任务打开了我的眼界。你能解释一下“r”在辩论中的用法吗?@B.O.C.当然。这是一个更好的F#特征——模式匹配。如果你写这个代码,让(id,r)::tail=lc来自
lc
的数据被分成几个“片段”。在这种情况下,id
将是字符串“DL 016-914”,r
将成为字符串列表[(“DL 189”,“ATL”);(“DL 124”,“BRU”);(“SN 733”,“CPH”)],tail
将是lc
行李目录的其余部分,其中丢弃了目录(列表)的第一个“项目”。