【问题标题】:For loop in Ocaml raises syntax error at end of the scriptOcaml 中的 For 循环在脚本末尾引发语法错误
【发布时间】:2018-08-05 17:30:14
【问题描述】:

我真的不习惯函数式语言......所以我真的很难学习 Ocaml 并将其用于我大学的课堂项目......我真的会在这里使用一些帮助......这就是我的问题: 我正在尝试使用 Ocaml 开发一个迷你编译器,所以我试图通过在我的 int 列表“lista_valores”上的元素上添加 1 来制作像 C++ 中的 i++ 一样的 icrement,该元素具有相同的变量名称索引在字符串列表“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;;

我拍摄的错误打印屏幕: 最终图像出现错误

感谢所有有兴趣尝试提供帮助的人!

【问题讨论】:

  • 尝试使用您不习惯的语言(甚至是范式)编写编译器可能不是最好的主意。是你的课程要求你用你几乎不知道的语言编写编译器吗?
  • 哇,那是什么编辑器?

标签: list loops syntax functional-programming ocaml


【解决方案1】:

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

【讨论】:

  • 谢谢医生!还有一个问题...在表达式 if (i = !resposta) then lista_novos_valores@[(List.nth !lista_valores i) +1] else lista_novos_valores@[List.nth !lista_valores i];为什么编译器会考虑必须是统一类型?
  • 编译器警告你它正在丢弃计算结果if (i = !resposta) then ... else ...
  • 也不要使用;;在编译的代码中。这只是交互式顶级的特殊标记。
猜你喜欢
  • 2017-04-17
  • 2014-10-10
  • 1970-01-01
  • 2016-08-23
  • 2015-06-06
  • 1970-01-01
  • 1970-01-01
  • 2011-08-03
相关资源
最近更新 更多