关于以下ocaml代码有什么问题?

时间:2016-11-26 18:06:42

标签: functional-programming ocaml

let rec funli li k = match li with 
| [x] -> if k==1 then Some(x) else None
| x::ll -> funli ll k-1;;
utop显示 错误:此表达式的类型为“a”选项,但表达式的类型为int

我认为没有理由期待它int。请帮助我了解此代码中发生的情况。我是OCaml的新手。

2 个答案:

答案 0 :(得分:1)

您的代码存在一些问题。首先,您希望明确k-1是一个参数,并且您不是要尝试返回(funli ll k)-1,这就是OCaml将该手臂解释为的内容。此外,==不用于测试OCaml中的相等性。这样可以正常使用

let rec funli li k = match li with 
| [x] -> if k=1 then Some(x) else None
| x::ll -> funli ll (k-1);;

答案 1 :(得分:0)

funli ll k-1被解析为(funli ll k)-1。所以你试图从一个选项中减去一个,导致你得到的错误。

你想要的是funli ll (k-1)