2017-05-02 58 views
0

的第n个元素我有一个返回给定的字符串时列表的功能:OCaml的 - 故障打印一览

let input_string_to_list input = 
    Str.split (Str.regexp "\n") input 

我也有应该返回一个列表的第n个元素的函数:

let rec get_nth = function 
    | h::_, 0 -> h 
    | h::t, n -> get_nth(t, n - 1) 
;; 

然后我试图打印列表的第n个元素(应该是一个字符串):

print_string (get_nth (input_to_set_strings input) n) 

但是我得到这个错误在编译:

Error: This expression has type string list but an expression was expected of type ('a -> 'b) list * int 

我不理解,我已经溜了,我是相当新的函数式编程,任何帮助表示赞赏,感谢。

+1

'List.nth'存在于stdlib中,顺便说一句。 – gsg

回答

1

get_nth预计一个元组,而不是两个单独的参数,所以它应该被称为像

get_nth ([1;2;3;4], 2) 
你的情况

print_string (get_nth ((input_to_set_strings input), n)) 

+1

我会补充说,不安全的函数不是那种惯用的 - 你也可以定义'let get_nth ln = let rec f = function ... in f(l,n)'作为修补程序 –

+1

@ÉtienneMillon或'let rec get_nth lst n =匹配lst,n用...',但我宁愿使用'List.nth' :) – Stas