Algorithm 创建一个函数,但还要确保实现另一个函数。可能吗?

Algorithm 创建一个函数,但还要确保实现另一个函数。可能吗?,algorithm,scala,for-loop,recursion,Algorithm,Scala,For Loop,Recursion,我正在学习coursera scala课程,所以请注意不要只给我已经烘焙过的代码,因为这将违反荣誉代码。我不是在寻找代码,而是在寻找算法的逻辑,以及如何实现我所想的东西 首先,问题是: 使用“forall”实现一个函数“exists”,该函数测试集合 至少包含一个给定谓词为true的元素。 请注意,函数“forall”和“exists”的行为类似于universal 一阶逻辑的存在量词 从我的理解来看: 创建“存在”。确保它在那里的某个地方实现 我创建了forall: def forall(

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

首先,问题是:

使用“forall”实现一个函数“exists”,该函数测试集合 至少包含一个给定谓词为true的元素。 请注意,函数“forall”和“exists”的行为类似于universal 一阶逻辑的存在量词

从我的理解来看:

创建“存在”。确保它在那里的某个地方实现

我创建了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)
  }
但是,该函数如何以任何方式帮助我创建exists? 我的意思是,对于exists,我想到的是完全相同的函数,但是当条件满足时,我不需要迭代,我只需要返回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)
 }
我的问题是我所想的是否正确,如果正确,我将如何实现所有功能,因为功能与完成此任务所需的功能大不相同。如果我没有抓住要点,你能告诉我该如何解决这个问题吗

注意
请不要给我烘焙代码

一个谓词p对于集合中的某些元素是真的,如果它对于集合中的所有元素都不是
false

根据您的问题,它显示为
Set
Int
的可编辑集合,因为谓词的类型为
Int=>Boolean

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

val gt: Int => Boolean = x => x > 10
然后可以使用给定的值调用它

gt(4)  //false
gt(11) //true
因此,该问题的关键是否定给定谓词,即需要创建具有以下签名的函数:

def negate(p: Int => Boolean): Int => Boolean

编写后,您就可以直接从定义中实现
exists
foreach
函数。

谓词p对于集合中的某些元素是真的,如果它对于集合中的所有元素都不是假的话。那么,是的,这是我在第二个函数中尝试实现的,但是它要求我实现所有提示:它们都是折叠的。。。一个以false开头,另一个以true开头@Bula-我给出的定义定义
存在于所有
中,因此您应该能够将其直接转换为代码。@Lee请将其转换为答案。我创建了否定函数:
def negate(f:Int=>Boolean):Int=>Boolean=x=>!f(x)
然后我将其应用于forall的谓词,但是我的测试仍然失败。我不确定我错过了什么here@Bula-“…如果集合中的所有元素都不为false。”显然,您的
实现存在
需要正确才能正常工作。