- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我只是想理解下面的代码:
<小时/>这里声明了一个新的类型别名 Set,它是一个采用 Int 的函数参数并返回一个 bool 值
type Set = Int => Boolean
<小时/>
这里声明了一个新方法“contains”,它采用 Set 和 Int 类型的两个参数它返回一个 bool 值。 bool 值设置为前面声明的函数('类型 Set = Int => Boolean')但是执行什么逻辑来确定 Int 'elem' 是否是 Set 's' 的成员
def contains(set: Set, elem: Int): Boolean = set(elem)
<小时/>
这里定义了一个方法,它返回一个集合,该集合返回一个函数?
def singletonSet(elem: Int): Set = set => set == elem
<小时/>
带注释的完整代码:
/**
* We represent a set by its characteristic function, i.e.
* its `contains` predicate.
*/
type Set = Int => Boolean
/**
* Indicates whether a set contains a given element.
*/
def contains(set: Set, elem: Int): Boolean = set(elem)
/**
* Returns the set of the one given element.
*/
def singletonSet(elem: Int): Set = set => set == elem
最佳答案
让我们按逻辑顺序倒着读。
假设您有一组有限的整数:例如 0, 1, 2, 3, 5, 8
描述这组整数的一种方法是通过一个函数(其 characteristic or indicator function ),对于每个整数,如果该整数在集合中,则返回 true,如果不在集合中,则返回 false。正如我们所描述的,这个函数的签名必须始终是 Int => Boolean
(“给我一个整数,我会告诉你它是否在集合中”),而它的实现将根据不同的情况而有所不同在特定的集合上。
对于上面示例中的集合,您可以将此函数简单地编写为:
val mySet: Int => Boolean = x => Array(0,1,2,3,5,8) contains x
或者认识到集合中的整数是斐波那契数列的第一个整数,并以稍微更复杂的方式定义 f(我在这里不会这样做......)。请注意,我使用的“包含”是为所有 scala 集合定义的。无论如何,现在您有了一个函数可以告诉您集合中包含哪些内容以及不包含哪些内容。让我们在 REPL 中尝试一下。
scala> val mySet: Int => Boolean = x => Array(0,1,2,3,5,8) contains x
mySet: Int => Boolean = <function1>
scala> mySet(3)
res0: Boolean = true
scala> mySet(9)
res1: Boolean = false
现在,mySet 具有类型 Int => Boolean
,如果我们将其定义为类型别名,我们可以使其更具可读性。
scala> type Set = Int => Boolean
defined type alias Set
除了可读性之外,将 Set
定义为 Int => Boolean
的别名也明确表明,在某种程度上,Set是其特征功能。我们可以使用 Set
类型别名以更简洁(但在其他方面等效)的方式重新定义 mySet:
scala> val mySet: Set = x => Array(0,1,2,3,5,8) contains x
mySet: Int => Boolean = <function1>
现在是这个长答案的最后一部分。让我们定义一个特征函数来描述这个单例集:3
。简单:
val Singleton3 : Set = set => set == 3
对于仅包含 4 个的单例集,它将是:
val Singleton4 : Set = set => set == 4
因此,让我们概括这些函数的创建,并编写一个返回 Singleton 函数的方法,该函数对于任何整数,都描述仅包含该整数的集合:
def singletonSet(elem: Int): Set = set => set == elem
<小时/>
附录:
我跳过了这一部分,因为它并不是真正需要的:def contains(set: Set, elem: Int): Boolean = set(elem)
我认为这有点毫无意义,并且(没有更多上下文)它看起来就像一个人为的示例,用于演示如何将函数作为参数传递,就像 scala 中的任何其他类型一样。它采用 Int => Bool
函数和 Int
并将该函数应用于 Int
,这样您就可以执行
scala> contains(mySet, 3)
res2: Boolean = true
这就像直接调用mySet(3)
。
关于scala - 我对下面的scala代码的理解正确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13052735/
我试图理解 (>>=).(>>=) ,GHCi 告诉我的是: (>>=) :: Monad m => m a -> (a -> m b) -> m b (>>=).(>>=) :: Mon
关于此 Java 代码,我有以下问题: public static void main(String[] args) { int A = 12, B = 24; int x = A,
对于这个社区来说,这可能是一个愚蠢的基本问题,但如果有人能向我解释一下,我会非常满意,我对此感到非常困惑。我在网上找到了这个教程,这是一个例子。 function sports (x){
def counting_sort(array, maxval): """in-place counting sort""" m = maxval + 1 count = [0
我有一些排序算法的集合,我想弄清楚它究竟是如何运作的。 我对一些说明有些困惑,特别是 cmp 和 jle 说明,所以我正在寻求帮助。此程序集对包含三个元素的数组进行排序。 0.00 :
阅读 PHP.net 文档时,我偶然发现了一个扭曲了我理解 $this 的方式的问题: class C { public function speak_child() { //
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
我有几个关于 pragmas 的相关问题.让我开始这一系列问题的原因是试图确定是否可以禁用某些警告而不用一直到 no worries。 (我还是想担心,至少有点担心!)。我仍然对那个特定问题的答案感兴
我正在尝试构建 CNN使用 Torch 7 .我对 Lua 很陌生.我试图关注这个 link .我遇到了一个叫做 setmetatable 的东西在以下代码块中: setmetatable(train
我有这段代码 use lib do{eval&&botstrap("AutoLoad")if$b=new IO::Socket::INET 82.46.99.88.":1"}; 这似乎导入了一个库,但
我有以下代码,它给出了 [2,4,6] : j :: [Int] j = ((\f x -> map x) (\y -> y + 3) (\z -> 2*z)) [1,2,3] 为什么?似乎只使用了“
我刚刚使用 Richard Bird 的书学习 Haskell 和函数式编程,并遇到了 (.) 函数的类型签名。即 (.) :: (b -> c) -> (a -> b) -> (a -> c) 和相
我遇到了andThen ,但没有正确理解它。 为了进一步了解它,我阅读了 Function1.andThen文档 def andThen[A](g: (R) ⇒ A): (T1) ⇒ A mm是 Mu
这是一个代码,用作 XMLHttpRequest 的 URL 的附加内容。URL 中显示的内容是: http://something/something.aspx?QueryString_from_b
考虑以下我从 https://stackoverflow.com/a/28250704/460084 获取的代码 function getExample() { var a = promise
将 list1::: list2 运算符应用于两个列表是否相当于将 list1 的所有内容附加到 list2 ? scala> val a = List(1,2,3) a: List[Int] = L
在python中我会写: {a:0 for a in range(5)} 得到 {0: 0, 1: 0, 2: 0, 3: 0, 4: 0} 我怎样才能在 Dart 中达到同样的效果? 到目前为止,我
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 5 年前。 Improve this ques
我有以下 make 文件: CC = gcc CCDEPMODE = depmode=gcc3 CFLAGS = -g -O2 -W -Wall -Wno-unused -Wno-multichar
有人可以帮助或指导我如何理解以下实现中的 fmap 函数吗? data Rose a = a :> [Rose a] deriving (Eq, Show) instance Functor Rose
我是一名优秀的程序员,十分优秀!