【发布时间】:2016-05-17 20:36:52
【问题描述】:
我试图弄清楚如何在不同类型的输入上实现折叠函数。作为示例,我将对列表使用 count 函数(不过,我有多个函数可以实现)。 假设一个 int 列表输入(这应该适用于任何类型的列表,不过),我的计数函数将是
val count = foldr (fn(x:int,y)=>y+1) 0 ;
val count = fn : int list -> int
但是,我正在尝试在类型为
的情况下创建计数函数val count = fn : int list * bool list -> int
其中 int 列表是集合的全域,布尔值确定全域的哪些值在集合中。即,(1,3,5,6),(true,false,false,true) 产生最后一组 (1,6),计数为 2。我首先想到的是某种形式的
val count= foldr (fn(x:(int*bool),y)=>if #2x then y+1 else y ) 0 ;
但这会导致返回类型为
val count = fn : (int * bool) list -> int
这不是我所需要的。从逻辑上讲,它们是相似的,但我希望将这两种类型组合在一起,分别放在一个列表中。
【问题讨论】: