创建一个函数,但也要确保我实现另一个函数.可能吗?

Bul*_*ula 3 algorithm recursion for-loop scala

我正在遵循课程scala课程,所以请注意,您不要只给我已经烘焙的代码,因为这将违反荣誉代码.我不是在寻找代码,而是寻找算法的逻辑,以及如何实现我想到的东西.

首先,问题是:

使用'forall',实现一个函数'exists',它测试一个集是否包含至少一个给定谓词为true的元素.请注意,函数'forall'和'exists'的行为类似于一阶逻辑的通用和存在量词.

几乎从我的理解是:

创建'存在'.确保它在某处实现了.

我创建了forall:

  def forall(s: Set, p: Int => Boolean): Boolean = {
    def iter(a: Int): Boolean = {
      if (a > bound) true
      else if (contains(s,a)) if(!p(a)) false else iter(a+1) 
      else iter(a+1)
    }
    iter(-bound)
  }
Run Code Online (Sandbox Code Playgroud)

但是,这个功能如何帮助我以任何方式创建存在?我的意思是我想到的是存在完全相同的功能,但不是在条件满足时迭代,我只需要返回true,因为找到了一个案例.从理论上讲,我不需要关心其他情况,因此只需要在第二个'if'返回true的位置进行迭代(这意味着第一个集合中的一个数字不能应用于第二个函数).让我更好地说明这一点:

 def exists(s: Set, p: Int => Boolean): Boolean = {
   def iter(a: Int): Boolean = {
     if (a > bound) true
     else if (contains(s,a)) if(!p(a)) iter(a+1) else true 
     else iter(a+1)
   }
   iter(-bound)
 }
Run Code Online (Sandbox Code Playgroud)

我的问题是天气,我认为是正确的,如果是,那么我将如何实现forall,因为功能与完成此功能所需的功能完全不同.如果我错过了这一点,你能否指出我应该如何解决这个问题?

注意 请不要给我烘焙代码

Lee*_*Lee 6

如果一个p元素的某些元素不适false用于该元素的所有元素,则该谓词属实.

鉴于您的问题,它似乎Set是一个可迭代的集合Int,因为谓词具有类型Int => Boolean.

您可以通过创建lambda表达式来创建此谓词类型的实例,例如

val gt: Int => Boolean = x => x > 10
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用给定的值调用它

gt(4)  //false
gt(11) //true
Run Code Online (Sandbox Code Playgroud)

因此,解决此问题的关键是否定给定谓词,即您需要创建具有以下签名的函数:

def negate(p: Int => Boolean): Int => Boolean
Run Code Online (Sandbox Code Playgroud)

一旦你写完,就可以直接从定义中实现exists你的foreach功能.