【发布时间】: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