0

这是问题。

我有这个类型集:

type Set = Int => Boolean

我可以这样使用:

val belowNegFive: Set = (i) => i < -5
belowNegFive(10)

我的意思是返回一个布尔值,具体取决于元素 10 是否属于 -5 以下的数字集。

  1. 我有这段代码,它返回其中的子sp
def filter(s: Set, p: Int => Boolean): Set = (e: Int) => s(e) && p(e)

Q1:我怎么知道 p(e) 告诉我 int e 满足谓词 p?

  1. s我有这个 fc,它返回是否满足中的所有有界整数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 默认都简单地满足谓词的条件?或者 true 只是一个停止条件?我不确定为什么这个 fc 不返回无限循环。只是一个无限的布尔值列表,最后一个布尔值对于所有 a > 边界都是“真、真、真……”。

Q3:而且我看不到它在结果布尔值之间使用 && 的哪一点来表示是,所有有界整数都s满足p

谢谢你

4

1 回答 1

1

对于 Q1: p是一个接受整数并返回布尔值的函数。我的谓词可能是这样的,数字应该小于-10。我的设置可以,应该小于-5。filter将返回两者都持有的自定义集。

  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

对于第二季度:

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(绑定),如果 set 包含整数并且谓词成立,则为真。如您所见,在最后一行中,检查从 -1000 ( iter(-bound)) 开始。

Q3:集合和谓词的真值表是什么样的?

set  | predicate | should continue checking?  
____________________________________________
true | true      | yes
false| true      | yes 
true | false     | no 
false| false     | yes

如您所见,它应该返回的唯一条件false是第三个条件,即else if条件。对于所有其他人,它继续检查下一个整数是否存在于集合和谓词中。

于 2018-03-17T20:07:35.397 回答