【发布时间】:2014-05-17 02:06:03
【问题描述】:
我正在关注 coursera scala 课程,所以请注意不要只给我已经烘焙的代码,因为这会违反荣誉代码。我不是在寻找代码,而是在寻找算法的逻辑以及如何实现我想到的东西。
首先,问题来了:
使用'forall',实现一个函数'exists',它测试一个集合是否 至少包含一个给定谓词为真的元素。 请注意,函数 '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)
}
但是,此功能如何以任何方式帮助我创建存在? 我的意思是我所考虑的存在是完全相同的函数,但不是在满足条件时进行迭代,我只需要返回 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)
}
我的问题是天气我认为是正确的,如果是,那么我将如何实现 forall,因为该功能与完成此功能所需的功能完全不同。如果我没有抓住重点,您能否指出我应该如何解决这个问题?
注意 请不要给我烘焙代码
【问题讨论】:
-
一个谓词 p 对集合中的某些元素为真,如果它对集合的所有元素不为假。
-
嗯,是的,这就是我在第二个函数中尝试实现的目标,但它要求我实现 forall
-
提示:它们都是折叠...一个以false开头,另一个以true开头!
-
@Bula - 我给出的定义是用
forall来定义exists,所以你应该能够直接将它翻译成代码。 -
@Lee 请将其放入答案中。
标签: algorithm scala for-loop recursion