【发布时间】:2023-03-03 04:19:01
【问题描述】:
我有一个函数,它接受一些参数并调用另一个函数,该函数返回 [a_1, a_2, ..., a_n] 形式的列表。
我要做的是对列表中的每个项目调用谓词 p,并返回 p(a_i)=True 的项目。
如果不是,那么我将递归地对所有 a_i 重复该算法。
结构如下:
f :: t -> t
f = (g t) --this is a list
(p ?) -- p is a predicate on each element
我想在列表中的每个项目上调用这个谓词 p 然后如果谓词为真则返回该项目。
如果谓词不适用于所有项目,那么我会在列表中的每个项目上递归调用 f,我意识到这会给我多个“t”,我知道如何将它们组合成一个 t 以匹配我的签名。
我发现了这个:
How to get out of iterate loop when a condition is met?
但条件的结构看起来与我尝试做的不同。
有人能指出我正确的方向吗?
【问题讨论】:
-
不幸的是,这个描述留下了太多的模棱两可,无法轻易回答。 (例如,如果
a_1和a_2都满足谓词会发生什么——返回a_1还是它们组合在一起?如果a_1到a_n都不满足,但g a_1怎么办?有两个满足谓词的元素,g a_2有另一个?你在说什么样的“组合”?)你能解释一下你试图解决的具体问题,即使是简化形式,或者给我们一些具体例子? -
从 Prelude (here) 中查看
filter的定义可能会很有用,并根据您的需要进行调整 - 它似乎是您尝试的关键组成部分做(至少据我所知)。或者作弊并使用来自Data.List的find。 -
你需要改进你的问题以避免它被关闭,如果你的问题很清楚,你更有可能得到有用的答案。请查看如何提问:stackoverflow.com/help/how-to-ask
标签: haskell recursion functional-programming