Scala中基于别名Set的元素过滤及谓词判定疑问
理解谓词函数
p(e) 的判断逻辑 首先咱们先梳理下你代码里的核心定义:
type Set = Int => Boolean:这里的Set本质是一个接收整数、返回布尔值的函数,它的作用就是判断某个整数是否属于这个“集合”——比如你写的belowNegFive(10)返回false,就是因为10不满足“小于-5”的条件。
你的filter函数定义是:
def filter(s: Set, p: Int => Boolean): Set = (e: Int) => s(e) && p(e)
现在来解答你的问题:为什么p(e)能表示整数e满足谓词p?
原因其实很直白:
- 这里的
p本身就是Int => Boolean类型的函数,也就是咱们常说的“谓词函数”——它的唯一职责就是接收一个整数,返回这个整数是否符合某个预设条件(比如“是偶数”“大于100”等等)。 - 当你调用
p(e)时,就是把整数e传入这个谓词函数,函数返回的Boolean值直接就代表了e是否满足p定义的规则。
举个具体例子帮你落地理解:
假设我们定义一个谓词p,用来判断整数是否是偶数:
val isEven: Int => Boolean = (i) => i % 2 == 0
当你调用isEven(4)时,返回true,说明4满足“是偶数”的条件;调用isEven(5)返回false,说明5不满足。这就是p(e)的核心作用——通过函数调用的结果,直接判断e是否符合p的规则。
回到你的filter函数,它返回的新Set逻辑非常清晰:一个整数e属于这个子集,当且仅当e原本属于集合s(s(e)为true),同时e满足谓词p的条件(p(e)为true),完全符合子集过滤的预期逻辑。
内容的提问来源于stack exchange,提问作者kaileena
相关产品推荐
相关产品推荐

