Прежде всего, ваши типы не совпадают.
Вы пытаетесь добавить int list
(что такое acc
) в словарь, который должен содержать int
s.
Однако, кроме того, причина, по которой компилятор не может определить тип ddict
, заключается в. Помните, что когда средство проверки типов определяет типы для функции, она не смотрит на то, с чем она вызывается позже. Имеется только следующая информация:
let rec inner tlist acc ddict =
match tlist with
| [] -> ddict.Add ("dummykey", acc)
| x::xs -> inner xs (x::acc) ddict
Это означает, что единственная информация, которую он знает о ddict
при компиляции функции, это то, что у него есть метод с именем Add
, который string * 'a list -> ?
.
Чтобы исправить это, измените
let rec inner tlist acc ddict =
до
let rec inner tlist acc (ddict:Dictionary<string,int>) =
Однако у вас все еще есть проблема с несовпадающими типами в словаре, поэтому вы, вероятно, захотите, чтобы оно было Dictionary<string, int list>
, если вы планируете хранить в нем int list
s.