1

)我刚从 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);

我不确定错误在哪里。

4

1 回答 1

0

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

我有几个建议:

  • 去除多余的= true
  • 用于[]空列表和通配符_用于未使用的值
  • 使用模式匹配L1代替hdandtl

现在这是更正后的函数:

fun listAnd _ [] = []
  | listAnd [] _ = []
  | listAnd (x::xs) ys = if exists x ys 
                         then x::(listAnd xs ys) 
                         else listAnd xs ys
于 2012-10-17T19:24:50.490 回答