gpt4 book ai didi

list - 标准ML : Searching through a list of lists

转载 作者:行者123 更新时间:2023-12-03 03:59:05 28 4
gpt4 key购买 nike

我编写了这个函数来确定给定元素是否存储在元组列表的列表中,但目前它只搜索第一个列表。我将如何搜索其余列表?

fun findItem (name : command, ((x,y)::firstlist)::tail : (command*command) list list) = 
if x = name then true else findItem(name, firstlist::tail)
| findItem(name, [[]]) = false

最佳答案

您将递归列表的其余部分(您需要三种情况):

fun findItem (name, ((x,_)::firstlist)::tail) = x = name orelse findItem(name, firstlist::tail)
| findItem (name, []::tail) = findItem (name, tail)
| findItem(name, []) = false

但是,如果您首先编写一个搜索列表的函数,然后在另一个函数中使用它,那么看起来会更容易:

fun findItemHelper (_, []) = false
| findItemHelper (name, (n', _)::ns) = name = n' orelse findItemHelper (name, ns)

fun findItem (_, []) = false
| findItem (name, n::ns) = findItemHelper (name, n) orelse findItem (name, ns)

除了orelse之前的部分之外,它们完全相同,因此我们可以使用谓词函数将其抽象出来:

fun find (_, []) = false
| find (found, x::xs) = (found x) orelse find (found, xs)

并使用它:

fun findItemHelper (name, ns) = find (fn (n, _) => name = n, ns)

fun findItem (name, nss) = find (fn ns => findItemHelper (name, ns), nss)

关于list - 标准ML : Searching through a list of lists,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44772260/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com