)我刚开始使用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);
我不确定错误在哪里。
答案 0 :(得分:0)
由于exists
是一个带两个参数的函数,你的错误是在两个参数周围加上额外的括号。例如,exists(hd(L1) L2)
应更正为exists (hd L1) L2
。
我有一些建议:
= true
[]
用于空列表,使用通配符_
表示未使用的值L1
上的模式匹配代替hd
和tl
现在这是更正后的功能:
fun listAnd _ [] = []
| listAnd [] _ = []
| listAnd (x::xs) ys = if exists x ys
then x::(listAnd xs ys)
else listAnd xs ys