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.foldl
或 List.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)
来翻转参数。
我正在尝试解决这个问题。
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.foldl
或 List.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)
来翻转参数。