2012-04-22 9 views
4

ocamlプロジェクトを作成しています。'E'ですべての''をcharリストに置き換えています。Ocamlは、指定されたすべての要素をリスト内の指定された要素に置き換えます。

私は構文エラーがあります...しかし、私は自分では理解できません。 私はこのようにそれを修正しようとしました:...

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) - > ....文字18-21)

私はそれを見て助けてください。ありがとうございました!

+0

構文エラー:あなたは、単にここで機能を使用することができます

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) 

注意?どこ? –

+0

@ NiklasB.just私の質問を更新しました、その行|(h :: t) - > .... char 18-21 –

+2

''''は有効なリテラルではありません。あなたは何を達成したいですか?スペース文字 '' ''を意味しますか? –

答えて

4

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

2つ目は、パターン一致でifを使用することです。代わりにwhenを使用する必要があります。|(h::t) when h = '' -> 'E'::(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) 
関連する問題