Отладка этого кода OCaml? Функциональное программирование - PullRequest
0 голосов
/ 20 февраля 2020
let rec fold_inorder f acc t =
match t with
| Leaf -> acc
| Node (l, n, r) -> f (fold_inorder f acc l) (f n (fold_inorder f acc r))

Я пытаюсь напечатать вложение дерева следующим образом:

fold_inorder (fun acc x -> acc @ [x]) [] (Node (Node (Leaf,1,Leaf), 2, Node (Leaf,3,Leaf))) = [1;2;3]

Я получаю сообщение об ошибке, говоря, что мой [x] равен

This expression has type 'a list
       but an expression was expected of type 'a
       The type variable 'a occurs inside 'a list

Я действительно не уверен, что делать отсюда. Кто-нибудь может подтолкнуть меня в правильном направлении?

1 Ответ

0 голосов
/ 20 февраля 2020

По вашему определению fold_inorder, какой тип вы ожидаете иметь f?

Если я посмотрю на этот вызов:

f n (fold_inorder f acc r)

, кажется, что первый параметр f - это новое значение из узла дерева, а второй параметр - это накопленное значение.

Но в своем тестовом вызове вы определяете f следующим образом:

(fun acc x -> ...)

Это предполагает, что первый параметр является накопленным значением, а второй параметр является новым значением из узла дерева.

...