5

私は ocaml プロジェクトを書いています。このプロジェクトには''、char-list 内のすべてを'E'. この提案のコードは次のとおりです。

    let rec string_lst_change_E lst = 
    match lst with
        [] -> let a ='E'; a::[]
        |(h::t) if (h = '') -> 'E'::(string_lst_change_E t) 
        |(h::t) ->  h::(string_lst_change_E t)
;;

構文エラーがあると表示されます...しかし、私は自分で理解できません。私はそれを次のように変更しようとしました:

    let rec string_lst_change_E lst = 
    match lst with
        [] -> 'E'::[]
        |(h::t) ->if (h = '') then 'E'::(string_lst_change_E t) else h::(string_lst_change_E t)
;;

しかし、まだ構文エラーがあります... (行 |(h::t) -> .... char 18-21)

ぜひ参考にしてみてください。ありがとうございました!

4

1 に答える 1

4

ここに最初のエラーがあります:[] -> let a ='E'; a::[]宣言した後に a を使用したい場合は、代わりに と書く必要があります[] -> let a = 'E' in a ::[]。明らかに、[] -> ['E']より単純です。

if2 つ目は、パターン マッチでの使用です。when代わりに次を使用する必要があります。|(h::t) when h = '' -> 'E'::(string_lst_change_E t)

しかし、とにかく「」とは何ですか?空キャラ?これをどのように文字列で取得しますか?入力''自体が構文エラーです。トップレベルで試してみてください!コードをコンパイルするために、 に置き換えまし''' '

let rec string_lst_change_E lst =
    match lst with
        | [] -> let a ='E' in a::[]
        | (h::t) when h = ' ' -> 'E'::(string_lst_change_E t) 
        | (h::t) ->  h::(string_lst_change_E t)

ここでは単純に関数を使用できることに注意してください。

let rec string_lst_change_E = function
    | [] -> let a ='E' in a::[]
    | (h::t) when h = ' ' -> 'E'::(string_lst_change_E t) 
    | (h::t) ->  h::(string_lst_change_E t)
于 2012-04-22T21:26:39.303 に答える