Scala 过滤别名 Set 的所有元素
Scala filter on all elements of an alias Set
这是问题。
我有这个类型集:
type Set = Int => Boolean
我可以这样使用:
val belowNegFive: Set = (i) => i < -5
belowNegFive(10)
我的意思是 return 一个布尔值,取决于元素 10 是否属于 -5 以下的一组数字。
- 我有这段代码,它 return 是
p
的 s
的子集。
def filter(s: Set, p: Int => Boolean): Set = (e: Int) => s(e) && p(e)
Q1:我怎么知道 p(e) 告诉我 int e 满足谓词 p?
- 我有这个 fc,它 return 是否
s
内的所有有界整数都满足 p
。
def contains(s: Set, elem: Int): Boolean = s(elem)
val bound = 1000
def forall(s: Set, p: Int => Boolean): Boolean = {
def iter(a: Int): Boolean = {
if (a > bound) true
else if (contains(s, a) && !p(a)) false
else iter(a+1)
}
iter(-bound)
}
Q2:为什么所有的a > bound都默认简单满足predicate的条件?或者 true 只是一个停止条件?我不确定为什么这个 fc 没有 return 无限循环。只是一个无限的布尔值列表,最后一个布尔值是 "true, true, true ..." 用于所有 > 绑定。
Q3:而且我没有看到它在结果布尔值之间使用 && 来表示是,s
中的所有有界整数都满足 p
.
谢谢
对于第一季度:
p
是一个接受整数和 returns 布尔值的函数。我的谓词可以是这样的,number 应该小于 -10。我的设置可以,应该小于-5。 filter
将 return 两者都适用的自定义集。
type Set = Int => Boolean
val belowNegFive: Set = (i) => i < -5
def filter(s: Set, p: Int => Boolean): Set = (e: Int) => s(e) && p(e)
val predicate: Int => Boolean = (num) => num < -10
val myset = filter(belowNegFive, predicate)
myset(0) #=> false
myset(-1) #=> false
myset(-10) #=> false
myset(-11) #=> true
第 2 季度:
def contains(s: Set, elem: Int): Boolean = s(elem)
val bound = 1000
def forall(s: Set, p: Int => Boolean): Boolean = {
def iter(a: Int): Boolean = {
if (a > bound) true
else if (contains(s, a) && !p(a)) false
else iter(a+1)
}
iter(-bound)
}
这是一个停止条件。 forall
指示如果对于所有整数 b/w -1000 到 1000(边界),如果集合包含整数并且谓词成立,则为真。如您所见,在最后一行中,检查从 -1000 (iter(-bound)
).
开始
Q3: 集合和谓词的真值 table 是什么样的?
set | predicate | should continue checking?
____________________________________________
true | true | yes
false| true | yes
true | false | no
false| false | yes
如你所见,只有条件return false
是第三个,也就是else if
条件。对于所有其他人,它会继续检查下一个整数是否存在于集合和谓词中。
这是问题。
我有这个类型集:
type Set = Int => Boolean
我可以这样使用:
val belowNegFive: Set = (i) => i < -5
belowNegFive(10)
我的意思是 return 一个布尔值,取决于元素 10 是否属于 -5 以下的一组数字。
- 我有这段代码,它 return 是
p
的s
的子集。
def filter(s: Set, p: Int => Boolean): Set = (e: Int) => s(e) && p(e)
Q1:我怎么知道 p(e) 告诉我 int e 满足谓词 p?
- 我有这个 fc,它 return 是否
s
内的所有有界整数都满足p
。
def contains(s: Set, elem: Int): Boolean = s(elem) val bound = 1000 def forall(s: Set, p: Int => Boolean): Boolean = { def iter(a: Int): Boolean = { if (a > bound) true else if (contains(s, a) && !p(a)) false else iter(a+1) } iter(-bound) }
Q2:为什么所有的a > bound都默认简单满足predicate的条件?或者 true 只是一个停止条件?我不确定为什么这个 fc 没有 return 无限循环。只是一个无限的布尔值列表,最后一个布尔值是 "true, true, true ..." 用于所有 > 绑定。
Q3:而且我没有看到它在结果布尔值之间使用 && 来表示是,s
中的所有有界整数都满足 p
.
谢谢
对于第一季度:
p
是一个接受整数和 returns 布尔值的函数。我的谓词可以是这样的,number 应该小于 -10。我的设置可以,应该小于-5。 filter
将 return 两者都适用的自定义集。
type Set = Int => Boolean
val belowNegFive: Set = (i) => i < -5
def filter(s: Set, p: Int => Boolean): Set = (e: Int) => s(e) && p(e)
val predicate: Int => Boolean = (num) => num < -10
val myset = filter(belowNegFive, predicate)
myset(0) #=> false
myset(-1) #=> false
myset(-10) #=> false
myset(-11) #=> true
第 2 季度:
def contains(s: Set, elem: Int): Boolean = s(elem)
val bound = 1000
def forall(s: Set, p: Int => Boolean): Boolean = {
def iter(a: Int): Boolean = {
if (a > bound) true
else if (contains(s, a) && !p(a)) false
else iter(a+1)
}
iter(-bound)
}
这是一个停止条件。 forall
指示如果对于所有整数 b/w -1000 到 1000(边界),如果集合包含整数并且谓词成立,则为真。如您所见,在最后一行中,检查从 -1000 (iter(-bound)
).
Q3: 集合和谓词的真值 table 是什么样的?
set | predicate | should continue checking?
____________________________________________
true | true | yes
false| true | yes
true | false | no
false| false | yes
如你所见,只有条件return false
是第三个,也就是else if
条件。对于所有其他人,它会继续检查下一个整数是否存在于集合和谓词中。