2014-08-29 66 views
1

在OCaml顶层中输入此函数时,我得到了以下结果。输入看起来与我两次完全相同,除了围绕着::运算符的空白外。任何人都可以在这里解释'a option list'a option之间的区别吗?'选项列表'和'列表之间的OCaml差异

# let rec at i = function 
    | [] -> None 
    | h::t -> if i = 1 then Some h else at (i-1) t;; 
    val at : int -> 'a option list -> 'a option = <fun> 
# let rec at i = function 
    | [] -> None 
    | h :: t -> if i = 1 then Some h else at (i-1) t;; 
    val at : int -> 'a list -> 'a option = <fun> 

回答

3

这是我看到:

$ ocaml 
     OCaml version 4.01.0 

# let rec at i = function 
    | [] -> None 
    | h::t -> if i = 1 then Some h else at (i-1) t;; 
val at : int -> 'a list -> 'a option = <fun> 
# let rec at i = function 
    | [] -> None 
    | h :: t -> if i = 1 then Some h else at (i-1) t;; 
val at : int -> 'a list -> 'a option = <fun> 

在我看来,您的实验在某些方面是有缺陷的。围绕::的间距不会有任何区别。

+0

你一定是对的。我无法重现这个问题,所以它一定与我之前忘记的一些绑定有关。谢谢! – 2014-08-29 21:03:23