我是OCaml
的新手,请帮助我了解以下错误的原因。
let rec union l1 l2= match l2 with
[]->l1
|x::xs->if not(List.mem x l1) then l1@[x];union l1 xs ;;
Characters 80-86:
|x::xs->if not(List.mem x l1) then l1@[x];union l1 xs;;
^^^^^^
错误:此表达式具有类型'列表 但是预期表达式为单位
答案 0 :(得分:0)
没有if
的{{1}}需要输入else
类型,但您的类型为unit
。可以这样想:如果你的情况是假的,你期望你的函数返回什么?
PS:'a list
是一个没有任何副作用的表达式。将它作为一个自己的声明,而不对其结果做任何事情。您可能希望将l1 @ [x]
用作l1@[x]
的第一个参数,而不只是union
。
答案 1 :(得分:0)
您要实施的算法是:
当app = Flask(__name__)
app.config['DEBUG'] = True
为空时,返回l2
,否则返回l1
时:
l2 = x::xs
的末尾添加x
(如果已经存在l1
和新l2 = xs
这不是您的实施所达到的目标。
您的实施执行以下操作:
创建列表l1
,不做任何事情。然后进行递归调用。
要使用值l1@[x]
,您需要将其绑定到某个名称,例如:
l1@[x]
在这里,我还完成了必要的let rec union l1 l2=
match l2 with
[]->l1
| x::xs->
if not(List.mem x l1)
then let newl1 = l1@[x] in union newl1 xs
else union l1 xs
分支,并附有一些有意义的陈述。
你甚至不需要找一个名字,你可以直接写出等价物:
else