F# 递归地填充字典?
我正在测试以下代码以递归方式填充字典。但是,类型推断似乎无法识别字典类型。我尝试过使用类型注释,但似乎没有帮助 在递归例程中使用字典有一些限制。我是否需要使字典可变,因为我希望在迭代过程中更改它F# 递归地填充字典?,f#,recursion,dictionary,types,type-inference,F#,Recursion,Dictionary,Types,Type Inference,我正在测试以下代码以递归方式填充字典。但是,类型推断似乎无法识别字典类型。我尝试过使用类型注释,但似乎没有帮助 在递归例程中使用字典有一些限制。我是否需要使字典可变,因为我希望在迭代过程中更改它 open System open System.Collections.Generic ////dictionary recursion test let pop_dict tlist = // let rec inner tlist acc ddict:Dictionary<stri
open System
open System.Collections.Generic
////dictionary recursion test
let pop_dict tlist =
// let rec inner tlist acc ddict:Dictionary<string,int> =
let rec inner tlist acc ddict =
match tlist with
| [] -> ddict.Add ("dummykey", acc)
| x::xs -> inner xs (x::acc) ddict
let ddict = Dictionary<string,int>()
inner tlist [] ddict
// Main Entry Point
let main() =
let tlist = [1;2;3;4]
let d = pop_dict tlist
main()
开放系统
open System.Collections.Generic
////字典递归测试
让pop_dict tlist=
//let rec inner tlist acc ddict:字典=
让rec INTERNAL tlist acc ddict=
匹配列表
|[]->ddict.Add(“dummykey”,acc)
|x::xs->内部xs(x::acc)DDCT
设ddict=Dictionary()
内部tlist[]ddict
//主要入口点
让main()=
设tlist=[1;2;3;4]
设d=pop_dict tlist
main()
这就是你想要的吗
let pop_dict tlist =
let rec inner tlist acc (ddict:Dictionary<string,int list>) =
match tlist with
| [] -> ddict.Add ("dummykey", acc)
| x::xs -> inner xs (x::acc) ddict
let ddict = Dictionary<string,int list>()
inner tlist [] ddict
// Main Entry Point
let main() =
let tlist = [1;2;3;4]
let d = pop_dict tlist
()
let pop_dict tlist=
let rec内部tlist acc(目录:字典)=
匹配列表
|[]->ddict.Add(“dummykey”,acc)
|x::xs->内部xs(x::acc)DDCT
设ddict=Dictionary()
内部tlist[]ddict
//主要入口点
让main()=
设tlist=[1;2;3;4]
设d=pop_dict tlist
()
这就是你想要的吗
let pop_dict tlist =
let rec inner tlist acc (ddict:Dictionary<string,int list>) =
match tlist with
| [] -> ddict.Add ("dummykey", acc)
| x::xs -> inner xs (x::acc) ddict
let ddict = Dictionary<string,int list>()
inner tlist [] ddict
// Main Entry Point
let main() =
let tlist = [1;2;3;4]
let d = pop_dict tlist
()
let pop_dict tlist=
let rec内部tlist acc(目录:字典)=
匹配列表
|[]->ddict.Add(“dummykey”,acc)
|x::xs->内部xs(x::acc)DDCT
设ddict=Dictionary()
内部tlist[]ddict
//主要入口点
让main()=
设tlist=[1;2;3;4]
设d=pop_dict tlist
()
首先,您的类型不匹配
您正试图将int列表
(即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*'一个列表->?
要解决它,就要改变
let rec inner tlist acc ddict =
到
let rec inner tlist acc(ddict:Dictionary)=
但是,如果您计划在字典中存储
int list
s,那么字典中不匹配的类型仍然存在问题,因此您可能希望它是dictionary
。首先,您的类型不匹配
您正试图将int列表
(即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*'一个列表->?
要解决它,就要改变
let rec inner tlist acc ddict =
到
let rec inner tlist acc(ddict:Dictionary)=
但是,如果你打算在字典中存储
int-list
s,你仍然会遇到字典中不匹配类型的问题,因此你可能希望它是字典。很好的解释-弄清楚/检查类型检查规则可能是学习F#最棘手的部分-但是它确实会集中精力和精力(希望)提高了我们的编码技能。很好的解释-弄清楚/检查类型检查规则可能是学习F#最棘手的部分-但是它确实能集中注意力并(希望)提高我们的编码技能。你想要一个包含你传入的列表的一个键(“dummykey”)的可变字典吗?让dic=dictionary();dic.add(“dummykey”,[1,2,3,4])您想要一个带有一个键(“dummykey”)的可变字典,其中包含您传入的列表?让dic=dictionary();dic.add(“dummykey”,[1,2,3,4])