【发布时间】:2016-06-01 01:27:12
【问题描述】:
我已经设法实现了一个模拟过滤器功能(经过多次尝试)
filter' :: (Num a, Eq a) => (a -> Bool) -> [a] -> [a]
filter' a [] = []
filter' a (x:xs) = if a x
then x : filter' a xs
else filter' a xs
我不太清楚的是类型声明
filter' :: (Num a, Eq a) => (a -> Bool) -> [a] -> [a]
-- filter' (<10) [1,2,3]
-- output = []
我们传入(<10) [1,2,3]。然而,在类型声明(a -> Bool) 中,我们以递归方式传入来自列表的 a,输出为真或假。但是如何表达测试(<10)? 我们为什么不添加另一个 Bool 呢?
【问题讨论】:
-
在哪里添加另一个
Bool? -
( Bool)。 [1,2,3] 是一个列表,类型为 [a]。过滤器函数接受这个函数和一个列表并返回另一个列表。
标签: haskell