Ocaml中的For循环在脚本结尾处引发语法错误

时间:2018-08-05 17:30:15

标签: list loops syntax functional-programming ocaml

我真的不习惯使用函数式语言...所以我真的很努力学习和使用Ocaml来大学的课堂项目...在这里我真的会用到一些帮助...这就是我的问题: 我正在尝试使用Ocaml进行小型编译器的工作,因此我试图通过在我的int列表“ lista_valores”的元素上添加1来使i ++在C ++中取得成功,该变量具有与变量名相同的索引在字符串列表“ lista_variaveis”中。但是出于某种原因,在添加For循环以使变量递增之后,Ocaml会在代码末尾继续引发语法错误。看看:

    let rec print_list = function 
[] -> ()
| e::l -> print_int e ; print_string " " ; print_list l



let pega_indice = fun s lista resposta ->
    let tamanho_lista = List.length lista in
    let tamanho_string = String.length s in
    let char = ref "0" in
    let existe = ref "0" in
    let condicao = ref 0 in
    try
    for i = 0 to (tamanho_lista-1) do
        let elemento = (List.nth lista i) in
        let tamanho_elemento = (String.length elemento) in
        if tamanho_elemento = tamanho_string then
      for j = 0 to (tamanho_elemento - 1) do            
        char := String.make 1 (String.get s j);
        existe := String.make 1 (String.get elemento j);
            condicao := if char = existe then
            (!condicao + 1)
            else
            0;      
      done;
      resposta := if !condicao = tamanho_elemento
      then i
        else -1;
        if !resposta = i then raise Exit;
    done;
    false
  with Exit -> true;;

let lista_variaveis = ref ["var1"; "var2"];;
let append_item lst a = lst @ [a];;
let lista_valores = ref [1; 5];;
let lista_novos_valores = [];;
let tamanho_listas = List.length !lista_valores;;
let resposta = ref 12314;;
let elemento = 0;;
print_endline("Digite a variavel:");;
let input = read_line();;
pega_indice input !lista_variaveis resposta;;
print_endline("indice da variavel:");;
print_endline(string_of_int !resposta);;
print_endline("incrementando...");;

for i = 0 to (tamanho_listas-1) do 
    begin
    if (i = !resposta) then lista_novos_valores@[(List.nth !lista_valores i) +1] else lista_novos_valores@[List.nth !lista_valores i];
    end;

print_list lista_novos_valores;;

我在打印屏幕上看到的错误: 最终图像出现错误 enter image description here

感谢有兴趣尝试帮助的每个人!

1 个答案:

答案 0 :(得分:1)

在代码末尾,您有一个do,但没有匹配的done