如果谓词成立,则从列表中删除项目

时间:2016-01-14 09:15:18

标签: list haskell predicate

我正在尝试创建一个以谓词和列表作为输入的函数。并从列表中删除谓词所有的元素。到目前为止我所拥有的是以下功能:

removeif :: func->[a]->[a]
removeif [] = []
removeif func (h:t)= if func then delete h (h:t) else removeif func t

我对func的{​​{1}}部分感到困惑,因为我不知道如何判断它是谓词。

例如我想要的是我从终端给出这个命令

func->[a]->[a]

removeif threefolds [1,2,3,4,5,6,7,8,9] 是一个本地函数,它返回一个三元组的无限列表,我想从输入列表中删除那些倍数。我想让threefolds成为一个bool函数,但不确定是否有必要。

2 个答案:

答案 0 :(得分:3)

谓词应该是+(void)sendGetRequestWithUrl:(NSString *)urlStr paramenters:(NSDictionary *)paramDic success:(successBlock)success failure:(failureBlock)failure { AFHTTPSessionManager* manager=[AFHTTPSessionManager manager]; [manager GET:urlStr parameters:paramDic progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { success(responseObject); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSError*error1=nil; failure(error1); }]; } 类型的函数。因此,a -> Bool的签名应为

removeif

如果removeif :: (a -> Bool) -> [a] -> [a] 的类型为threefolds,您就可以了: - )

答案 1 :(得分:1)

Threefolds应该返回一个布尔值,如下所示:

   let threefolds x =  x `mod` 3 == 0