я обнаружил weired вещи:OCaml: List.iter начинается с следующим элементом после матча
В моем коде, я хочу, чтобы вывести данные из списка, который содержит элементы особого типа, состоящий из другога тип и name
.
Мне никогда не нужен такой код раньше, поэтому я не знаю, почему он не работает или запрещен или что-то в этом роде.
List.iter(
fun x -> (
fprintf oc "(";
fprintf oc "asdf";
match x.kind with
|Id -> fprintf oc "Id"
|Op -> fprintf oc "Op"
|Test -> fprintf oc "Test"
;
fprintf oc "fdsa";
fprintf oc "%s" x.name;
fprintf oc "),";
)
)list;
asdf и fdsa являются тестовыми выходами, чтобы увидеть, где проблема. осов моего выхода канал для записи в файл, остальное должно быть тихо самоуправление объяснения для OCaml-профессионалов, как вы :)
К сожалению, я получаю только результат, как эти: (asdfId(asdfOp(asdfId
, так что кажется, что выполнение останавливается после матча, и он продолжает следующий элемент списка.
Ожидаемый результат будет (asdfIdfdsatest1),(asdfOpfdsatest2)
...
Я не могу просто переместить x.name к вершине, так как мне нужна закрывающая скобка
Что я делаю неправильно, я упускаю ошибка? Кто-нибудь знает, как выводить мои данные?
Используйте соответствующий код OCaml отступы, чтобы избежать таких ошибок, таких как ocaml-mode, tuareg-mode или ocp-indent. Они отступывают строку 'fprintf oc 'fdsa"; 'иначе, чем ваше намерение. – camlspotter