2013-05-25 4 views
-1

Я потерял весь свой день в этой проблеме. Таким образом, у меня есть рекурсивная функция так:OCaml: Адаптация рекурсивной функции

let rec rewriteTree tree = 
     rewriteElement tree c; 
     List.iter rewriteTree tree.subtree in 
    rewriteTree myTree 

Функция rewriteElement возвращает единица(), так что я не проблемы с функцией rewriteTree. Но я вносил изменения в свой код, а функция rewriteElement теперь возвращает логическое значение, и мне нужно, чтобы он возвращал логический список со всеми булерами всех узлов дерева. Каков наилучший способ сделать это? Я пробовал с List.map, но компилятор бросает, что функция возвращает (список булевых списков). Благодарю.

+2

Можете ли вы объяснить, что вы пытаетесь достичь с помощью этой функции вместо этого? То есть образец ввода и вывода – rgrinberg

+0

Прошу прощения, но это очень сложно объяснить. Фокусировка вопроса касается типа возврата. –

ответ

3

Попробуйте это:

let rec rewriteTree tree = 
    rewriteElement tree c :: 
    List.concat (List.map rewriteTree tree.subtree) in 
rewriteTree myTree 
+2

'List.concat' и' List.flatten' являются синонимами. – lukstafi

Смежные вопросы