2012-04-23 11 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は関数表記を使用します。だから、次のようになります。

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

編集:

サイドコメント:

String.length str 

これが好きではありません。このソリューションは非常に多くの問題に不可欠テイクです。 FPの考え方を習得しようとしているなら、再帰的かつ不断の思考を試みるべきです。これは宿題のように見えるので、機能的な解決策はあなたが望むものである可能性が非常に高いです。

しかし、ここではあなたの元のコードでいくつかの他の問題です:

  1. あなたは、間に何もないとお互いに次の2つの式を持っています。 2つのことを実行する場合は、セミコロンで区切る必要があります()。

  2. =は2つの値を比較しています。参照に値を割り当てる場合は、:=を使用する必要があります。 (再び命令型のスタイル、。)

+0

は今、私は別の問題:) で 'rastavi列str = せてみましょうサブリスト= REF [] LETリスト中= REF []を持っている、あなたに感謝し、その1つの解決しますfor i =((String.length str)-1)downto 0 do str。[i]!= ""ならば(str。[i] ::!sublist) else(リスト:=(サブリスト::!リスト));サブリスト:= [] done ;; ' charリスト – user1291037

+0

編集を参照してください。よろしく、 –

+0

これらのエラーは、私がターミナルからC/Pしていたためにありました。そして、ちょうどいくつかの兆候が消えました。 – user1291037

関連する問題