快学Scala习题解答—第一章 基础

 

A Read–Eval–Print Loop (REPL), also known as an interactive toplevel or language shell, is a simple, interactive computer programming environment that takes single user inputs (i.e. single expressions), evaluates them, and returns the result to the user; a program written in a REPL environment is executed piecewise. The term is most usually used to refer to programming interfaces similar to the classic Lisp machine interactive environment. Common examples include command line shells and similar environments for programming languages, and is particularly characteristic of scripting languages.[1]

In a REPL, the user enters one or more expressions (rather than an entire compilation unit) and the REPL evaluates them and displays the results. The name read–eval–print loop comes from the names of the Lisp primitive functions which implement this functionality:

The read function accepts an expression from the user, and parses it into a data structure in memory. For instance, the user may enter the s-expression (+ 1 2 3), which is parsed into a linked list containing four data elements.
The eval function takes this internal data structure and evaluates it. In Lisp, evaluating an s-expression beginning with the name of a function means calling that function on the arguments that make up the rest of the expression. So the function + is called on the arguments 1 2 3, yielding the result 6.
The print function takes the result yielded by eval, and prints it out to the user. If it is a complex expression, it may be pretty-printed to make it easier to understand. In this example, though, the number 6 does not need much formatting to print.
The development environment then returns to the read state, creating a loop, which terminates when the program is closed.

REPL — 交互式解释器环境。
R(read)、E(evaluate)、P(print)、L(loop)
输入值,交互式解释器会读取输入内容并对它求值,再返回结果,并重复此过程。

1 简介

近期对Scala比较感兴趣,买了本《快学Scala》,感觉不错。比《Programming Scala:Tackle Multi-Core Complexity on the Java Virtual Machine》好很多。 是本不错的入门书。而且每个章节都设置了难度级别,每章有习题,可以巩固Scala语法。

本文的目的就是针对这些习题进行解答

2 基础

 2.1 在Scala REPL中键入3,然后按Tab键。有哪些方法可以被应用?

这个。。。。直接操作一遍就有结果了.此题不知是翻译的问题,还是原题的问题,在Scala REPL中需要按3. 然后按Tab才会提示。 直接按3加Tab是没有提示的。下面是结果

!=             ##             %              &              *              +
-              /              <              <<             <=             ==
>              >=             >>             >>>            ^              asInstanceOf
equals         getClass       hashCode       isInstanceOf   toByte         toChar
toDouble       toFloat        toInt          toLong         toShort        toString
unary_+        unary_-        unary_~        |

列出的方法并不全,需要查询全部方法还是需要到Scaladoc中的Int,Double,RichInt,RichDouble等类中去查看。

 

2.2 在Scala REPL中,计算3的平方根,然后再对该值求平方。现在,这个结果与3相差多少?(提示:res变量是你的朋友)

依次进行计算即可

scala> scala.math.sqrt(3)
warning: there were 1 deprecation warnings; re-run with -deprecation for details
res5: Double = 1.7320508075688772

scala> res5*res5
res6: Double = 2.9999999999999996

scala> 3 - res6
res7: Double = 4.440892098500626E-16

2.3 res变量是val还是var?

val是不可变的,而var是可变的,只需要给res变量重新赋值就可以检测res是val还是var了

scala> res9 = 3
<console>:8: error: reassignment to val
       res9 = 3
          ^

2.4 Scala允许你用数字去乘字符串—去REPL中试一下"crazy"*3。这个操作做什么?在Scaladoc中如何找到这个操作?
scala> "crazy"*3
res11: String = crazycrazycrazy

从代码可以推断,*是"crazy"这个字符串所具有的方法,但是Java中的String可没这个方法,很明显。此方法在StringOps中。

 

2.5 10 max 2的含义是什么?max方法定义在哪个类中?
直接在REPL中执行

scala> 10 max 2
res0: Int = 10

scala> 7 max 8
res1: Int = 8

scala> 0 max 0
res2: Int = 0

可以看出,此方法返回两个数字中较大的那个。此方法Java中不存在,所以在RichInt中。

 

 

 2.6 用BigInt计算2的1024次方
简单的API调用

scala> BigInt(2).pow(1024)
res4: scala.math.BigInt = 1797693134862315907729305190789024733617976978942306572734300811577326758055009631327084773224
075360211201138798713933576587897688144166224928474306394741243777678934248654852763022196012460941194530829520850057688
38150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216

 

2.7 为了在使用probablePrime(100,Random)获取随机素数时不在probablePrime和Radom之前使用任何限定符,你需要引入什么?

so easy. import需要的包啊。Random在scala.util中,而probablePrime是BigInt中的方法,引入即可

import scala.math.BigInt._
import scala.util.Random

probablePrime(3,Random)

 

 2.8 创建随机文件的方式之一是生成一个随机的BigInt,然后将它转换成三十六进制,输出类似"qsnvbevtomcj38o06kul"这样的字符串。查阅Scaladoc,找到在Scala中实现该逻辑的办法。

到BigInt中查找方法。

scala> scala.math.BigInt(scala.util.Random.nextInt).toString(36)
res21: String = utydx

 

2.9 在Scala中如何获取字符串的首字符和尾字符?

//获取首字符
"Hello"(0)
"Hello".take(1)
//获取尾字符
"Hello".reverse(0)
"Hello".takeRight(1)

2.10 take,drop,takeRight和dropRight这些字符串函数是做什么用的?和substring相比,他们的优点和缺点都是哪些?

查询API即可 take是从字符串首开始获取字符串,drop是从字符串首开始去除字符串。 takeRight和dropRight是从字符串尾开始操作。 这四个方法都是单方向的。 如果我想要字符串中间的子字符串,那么需要同时调用drop和dropRight,或者使用substring

 

http://www.ivanpig.com/blog/?p=452

 

时间: 2024-11-02 20:03:34

快学Scala习题解答—第一章 基础的相关文章

《快学Scala》第三章 数组相关操作

本文转自博客园xingoo的博客,原文链接:<快学Scala>第三章 数组相关操作,如需转载请自行联系原博主.

《快学Scala》第六章 对象 第七章 包和引入

本文转自博客园xingoo的博客,原文链接:<快学Scala>第六章 对象 第七章 包和引入,如需转载请自行联系原博主.

《快学Scala》第五章 类

关于case class和普通class的区别,可以参考:https://www.iteblog.com/archives/1508.html 本文转自博客园xingoo的博客,原文链接:<快学Scala>第五章 类,如需转载请自行联系原博主.

《快学Scala》第四章 映射与元组

本文转自博客园xingoo的博客,原文链接:<快学Scala>第四章 映射与元组,如需转载请自行联系原博主.

《快学Scala》第二章 控制结构和函数

本文转自博客园xingoo的博客,原文链接:<快学Scala>第二章 控制结构和函数,如需转载请自行联系原博主.

Flash基础理论课 第一章 基础动画概念

返回"Flash基础理论课 - 目录" 第一章 基础动画概念 Flash就是一台动画机器.从Flash 最早的版本开始,就支持补间动画--只需要创建两个不同的关键帧,然后让Flash 自动创建补间动画即可.本书将介绍 Flash 中的一种强大的语言-ActionScript.该书包括了编程,数学,物理等技术,并结合 ActionScript 让物体动起来,这些都是补间动画无法比拟的. 什么是动画? "动画"一词,引用美国传统词典中的解释 1.使有生命:充满生命力 2

《快学Scala》第八章 继承

本文转自博客园xingoo的博客,原文链接:<快学Scala>第八章 继承,如需转载请自行联系原博主.

矩阵论 第一章 基础概念和定律

数学基础之矩阵篇 理论概念: 思考的时候可能有用 数域: 一个数集对四则运算封闭(四则运算的结果仍在数集内)则称之为数域. Q,R,C都是数域,而Z不是数域因为对除法不封闭. 加群: 一个非空集合V, 若V中有一种规则称之为加法"+", 满足 交换律 a+b=b+a 结合律 a+b+c=a+(b+c) 存在零元 (任意u∈V有u+0=u)  存在唯一负元 (任意u∈V有唯一-u使 u + (-u) =0). 则称V在加法运算下成一个加群.记为(V,+) 线性空间(或称向量空间): 对于

Python基础教程学习笔记 第一章 基础知识_Android

1.python的每一个语句的后面可以添加分号也可以不添加分号:在一行有多条语句的时候,必须使用分号加以区分 2.查看Python版本号,在Dos窗口中输入"python -V"查看版本号,注意V是大写字母,这条命令是Windows命令,而不是python shell的命令 3.让解释器只执行普通的除法运算:from __feture__ import division 4.执行整除运算的运算符:// 5.取幂运算符:2**4 相当于2的4次方,-2**4相当于2的4次方之后取负,因为