あなたは(あなたは3例が必要)リストの残りの部分の上に再帰的になります。
fun findItem (name, ((x,_)::firstlist)::tail) = x = name orelse findItem(name, firstlist::tail)
| findItem (name, []::tail) = findItem (name, tail)
| findItem(name, []) = false
しかし、あなたが最初にそのリストを検索関数を記述している場合、それは目にはるかに簡単ですこれらはorelse
の前の部分を除いてまったく同じです
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)
ので、私たちすることができます述語関数を持つ抽象そのアウト:別の関数にそれを使用
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)