我正在尝试使用List模块中的fold_right和List.iter函数。无论如何,它们是否相互结合使用?
let step nfa start transition =
let transition_list = get_transition nfa in
List.iter ( fun state ->
List.fold_right (fun ct nl ->
if ((get_pre_trans transition)= state && (get_trans ct) = transition) then
(get_post_transition transition)::nl
else
nl
) transition_list []
) start
;;
** get_xxx函数从元组中获取值,其中存在转换前,转换值和转换后。
返回错误: 错误:此表达式的类型为“列表,但表达式的类型为单位。
不确定该怎么做。
答案 0 :(得分:3)
您传递给iter
的函数正文只包含一个表达式,即对fold_right
的调用,其值为list
的值,但是iter
签名要求您传递一个函数,该函数返回类型unit
的值。这基本上是编译器试图对你说的。如果您对fold_right
的评估值不感兴趣,那么您可以使用ignore
函数忽略它,它接受任何类型的值并返回类型{{1}的值}}。另一方面,如果您不想丢弃它,那么您不应该使用unit
,并使用iter
或更好的fold_right
。
最后,回答你的问题,是的,还有将它们组合在一起的方法,但通常情况下,如果你在其中应用折叠,你就会做错事。