【问题标题】:What is problematic about below ocaml code?下面的 ocaml 代码有什么问题?
【发布时间】:2016-11-26 18:06:41
【问题描述】:
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 的新手。

【问题讨论】:

  • x:ll arm 中尝试funli ll (k-1)
  • 另外,k==1 是无效的语法。你想要k=1== 不用于测试 OCaml 中的相等性。
  • 这不是无效的语法。但不推荐用于整数。

标签: functional-programming ocaml


【解决方案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);;

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-06-27
      • 1970-01-01
      • 2018-03-12
      • 1970-01-01
      • 2012-11-06
      相关资源
      最近更新 更多