返回两个列表中出现的元素列表 - SML

时间:2012-10-17 19:10:24

标签: list sml

)我刚开始使用SML并且一直在尝试编写一个带有两个列表L1和L2的函数,并返回两者中出现的元素列表。这就是我到目前为止所做的:

fun exists x nil = false | exists x (h::t) = (x = h) orelse (exists x t);

    fun listAnd L1 nil = nil
     | listAnd nil L2 = nil
     | listAnd L1 L2 = if exists(hd(L1) L2) = true then hd(L1)::(listAnd(tl(L1) L2)) else listAnd(tl(L1) L2);

我不确定错误在哪里。

1 个答案:

答案 0 :(得分:0)

由于exists是一个带两个参数的函数,你的错误是在两个参数周围加上额外的括号。例如,exists(hd(L1) L2)应更正为exists (hd L1) L2

我有一些建议:

  • 删除多余的= true
  • []用于空列表,使用通配符_表示未使用的值
  • 使用L1上的模式匹配代替hdtl

现在这是更正后的功能:

fun listAnd _ [] = []
  | listAnd [] _ = []
  | listAnd (x::xs) ys = if exists x ys 
                         then x::(listAnd xs ys) 
                         else listAnd xs ys