【问题标题】:Ocaml Error: Unbound record field label lengthOcaml 错误:未绑定的记录字段标签长度
【发布时间】:2012-04-23 18:32:51
【问题描述】:

这是我遇到的错误,我不知道为什么:“错误:未绑定的记录字段标签长度” 有谁知道吗?

let rastavi str =
    let sublist = ref [] in
    let list = ref [] in
    for i = ((str.length str)1) [down]to 0 do
   if str.[i] =' '    then (str.[i] :: !sublist)
  else (list := (!sublist:: !list))   sublist = [] 
  done ;; 

【问题讨论】:

    标签: ocaml


    【解决方案1】:

    您正在使用 OO 表示法来获取字符串的长度。 OCaml 使用函数式表示法。所以它看起来像这样:

    String.length str
    

    不是这样的:

    str.length (* OO notation, not in OCaml *)
    

    编辑:

    旁注:这个解决方案在很大程度上是解决问题的必要手段。如果你想学习 FP 思维方式,你应该尝试递归和不变地思考。由于这看起来像家庭作业,因此很可能您想要一个实用的解决方案。

    但您的原始代码中还有一些其他问题:

    1. 您有两个彼此相邻的表达式,中间没有任何内容。如果你想“做”两件事,需要用分号;隔开(不过,这是命令式)

    2. 您正在使用=,它比较两个值是否相等。如果你想给一个引用赋值,你需要使用:=。 (又是命令式。)

    【讨论】:

    • 解决了这个问题,谢谢,现在我有另一个问题 :) let rastavi str = let sublist = ref [] in let list = ref [] in for i = ((String.length str)-1) downto 0 do if str.[i] != " " then (str.[i] :: !sublist) else (list := (sublist:: !list)); sublist := [] done;; 这个表达式有单位类型,但表达式应该是字符列表类型
    • 这些错误在那里,因为我已经从终端 c/p 它只是删除了一些迹象(击败我为什么)。
    • 好的。在新代码中首先查看if/then/else。 then之后的事物类型是char list,而else之后的事物类型是unit。这就是编译器告诉你的。第一个表达式(在then 之后)没有“做”任何事情,它只是“是”一个列表。你想让它做点什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多