期待OCaml中的类型单位

时间:2016-04-21 10:28:14

标签: ocaml

我想打印不在哈希表中的数字,在本例中为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;;

1 个答案:

答案 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)"又是单位型(如上所述)。