2012-04-23 61 views
-1

这是我得到的错误,我不知道为什么:“错误:未绑定的记录字段标签长度” 是否anyonw知道?Ocaml错误:未绑定的记录字段标签长度

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 ;; 

回答

2

您正在使用OO符号来获取字符串的长度。 OCaml使用功能符号。所以它看起来像这样:

String.length str 

不喜欢这样的:

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

编辑:

边评论:这个解决方案是非常势在必行起飞的问题。如果你想学习FP思维,你应该尝试递归思考并不断改进。由于这看起来像作业,所以很可能你需要一个功能性解决方案。

但在这里是在原始代码的一些其他问题:

  1. 你必须彼此相邻没事之间两个表达式。如果你想“做”两件事,你需要用分号分开;(然而,这是势在必行的风格)

  2. 您正在使用=比较两个值是否相等。如果您想为参考分配一个值,则需要使用:=。 (命令行式风格,再次)

+0

解决了一个,谢谢你,现在我有一个问题:) '让rastavi海峡= 让子表= REF []中 let列出=在 参考[]对于i =((String.length str)-1)downto 0 do if str。[i]!=“”then(str。[i] ::!sublist) else(list:=(sublist ::!列表));子列表:= [] 完成;;' 这个表达式单元,但被预期 类型char列表 – user1291037 2012-04-23 19:10:56

+0

的表达参见编辑。问候, – 2012-04-23 19:21:57

+0

和那些错误在那里,因为我从终端c/p它,它只是抹去了一些迹象(打我为什么)。 – user1291037 2012-04-23 20:47:17