FunSet Elm-折叠操作

FunSet Elm- fold operation

我正在尝试解决这个问题。

type alias FunSet = Int -> Bool          
contains : FunSet -> Int -> Bool   
contains set elem = set elem

singletonSet : Int -> FunSet  
singletonSet elem = \inputElem -> elem == inputElem

union : FunSet -> FunSet -> FunSet   
union a b = (\x -> (contains a x) || (contains b x))   

          

我的折叠函数应该执行以下操作: 获取集合列表和 returns 一个新集合,该集合是通过使用 operation 函数应用折叠构建的。

fold: List FunSet -> ( FunSet -> FunSet -> FunSet ) -> FunSet
fold operation sets = 

示例:

(fold union [(singletonSet 1), (singletonSet 2), (singletonSet 3)]) 1 == True

我不清楚我应该怎么做。希望有人能帮忙^^

您可以为此使用 List.foldlList.foldr

fold sets f = 
  case sets of
    [] -> \_ -> False
    x :: xs -> List.foldl f x xs

我觉得定义emptySet _ = False会更容易,直接使用List.foldl:

List.foldl union emptySet [(singletonSet 1), (singletonSet 2), (singletonSet 3)]

注意 List.foldl 的第一个参数是一个函数,它首先接受一个元素,然后是累加器,而不是相反,所以你不能简单地使用 fold sets diff,你必须使用 fold sets (flip diff) 来翻转参数。