我想打印不在哈希表中的数字,在本例中为1,3和5.我收到以下错误:
This expression has type int but an expression was expected of type
单元
为什么期望类型单位?
let l = [1; 2; 3; 4; 5];;
let ht = Hashtbl.create 2;;
Hashtbl.add ht 0 2;;
Hashtbl.add ht 1 4;
let n = List.iter (fun a -> if Hashtbl.mem ht a then -1 else a) l in
if n > 0 then print_int a;;
答案 0 :(得分:0)
使用行List.iter (fun a -> if Hashtbl.mem ht a then -1 else a) l
,您可以为列表中的每个元素调用一个函数。
此函数必须具有类型单位,因为将n个函数应用程序的结果分配给任何东西都没有意义。
你可能想要的是
let l = [1; 2; 3; 4; 5];;
let ht = Hashtbl.create 2;;
Hashtbl.add ht 0 2;;
Hashtbl.add ht 1 4;
List.iter (fun a -> if not (Hashtbl.mem ht a) then (print_int a; print_newline ())) l
在此解决方案中,您为每个变量调用print-function。表达式" print_int(-1)"又是单位型(如上所述)。