在F中实现iter的list#

在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#来理解这个错误。如果有人能给我一些建议,引导我走向正确的方向,我将不胜感激

我不熟悉函数式语言编程。我正试图实现国际热核实验堆的清单。我认为它应该类似于在列表中收集,但不确定如何绕过它。这是我为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#来理解这个错误。如果有人能给我一些建议,引导我走向正确的方向,我将不胜感激。 谢谢
`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
之后插入分号(用于排序),并确保空列表的结果具有type
unit
,应该可以做到这一点

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;;