在F中实现iter的list#
我不熟悉函数式语言编程。我正试图实现国际热核实验堆的清单。我认为它应该类似于在列表中收集,但不确定如何绕过它。这是我为F#中的列表尝试的iter函数: 编译错误为:在F中实现iter的list#,list,f#,functional-programming,List,F#,Functional Programming,我不熟悉函数式语言编程。我正试图实现国际热核实验堆的清单。我认为它应该类似于在列表中收集,但不确定如何绕过它。这是我为F#中的列表尝试的iter函数: 编译错误为:类型不匹配。预期为“a”,但给定了一个('b->'a->'c->'d->'e list)->'b list->'e list统一“a”和“('b->'a->'c->'d->'e list)->'b list->'e list”时,结果类型将是无限的。 我不懂F#来理解这个错误。如果有人能给我一些建议,引导我走向正确的方向,我将不胜感激
类型不匹配。预期为“a”,但给定了一个('b->'a->'c->'d->'e list)->'b list->'e list统一“a”和“('b->'a->'c->'d->'e list)->'b list->'e list”时,结果类型将是无限的。
我不懂F#来理解这个错误。如果有人能给我一些建议,引导我走向正确的方向,我将不胜感激。
谢谢
`iter的类型为
('T->unit)->'T list->unit
,即仅用于功能的副作用
主要问题是向func
let rec iter func list =
match list with
| [] -> []
| hd::tl -> func hd iter func tl;;
^ ^ ^ ^
1 2 3 4
其中四个,但是func
只取一个func
的类型应为'T->unit
在func hd
之后插入分号(用于排序),并确保空列表的结果具有typeunit
,应该可以做到这一点
let rec iter func list =
match list with
| [] -> ()
| hd::tl -> func hd;
iter func tl;;
你是在这里发布前两个问题的同一个人吗?我建议您阅读list.fs的源代码,它有所有std库的实现。我应该在哪里阅读list.fs的源代码?它只说了
让iter f list=Microsoft.FSharp.Primitives.Basics.list.iter f list
,我想实际学习如何实现它…所以去看看该函数是在哪里定义的。如果你仔细看,你的问题的答案就在那里,
let rec iter func list =
match list with
| [] -> ()
| hd::tl -> func hd;
iter func tl;;