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的新手。
答案 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)
。