快学Scala课后习题答案

分享一个之前做快学Scala的课后习题(2-21章节,19无)的Github链接,我把习题的文字写在了每个回答的注释上面,这样方便大家对照着看,省的回过头去对照着pdf看了,如果有做的不对的地方希望大家给予指正。

链接如下,http://github.com/fxxkinglife/scala-hello

举一个第二章节的例子,

object charpter02 {

/*
* 2.1
* 一个数字如果为正数,则它的signum为1;
* 如果是负数,则signum为-1;
* 如果为0,则signum为0.编写一个函数来计算这个值
* */
def question1(x: Int) = if (x > 0) 1 else if (x == 0) 0 else -1

/*
* 2.2
* 一个空的快表达式{}的值是什么?类型是什么?
* */
def question2
{
  println({ })
  println({ }.getClass)
}

/*
* 2.3
* 指出在Scala中何种情况下赋值语句x=y=1是合法的。
* (提示:给x找个合适的类型定义)
*/
def question3
{
  var x: Unit = ()
  println("x‘s type is: " + x.getClass)
  var y = 1
  x = y = 1
}

/*
* 2.4
* 针对下列Java循环编写一个Scala版本:
* for(int i=10;i>=0;i–)System.out.println(i);
*/
def question4
{
  (1 to 10 reverse) foreach println
}

/*
* 2.5
* 编写一个过程countdown(n:Int),打印从n到0的数字
*/
def question5(n: Int) {
  n match {
    case n if n >= 0 => {
      (0 to n reverse) foreach println
    }
    case n if n < 0 => {
      n to 0 foreach println
    }
  }
}

/*
* 2.6
* 编写一个for循环,计算字符串中所有字母的Unicode代码的乘积。
* 举例来说,"Hello"中所有字符串的乘积为9415087488L
*/
def question6(s: String): Long = {
  var res: Long = 1
  s foreach { res *= _.toLong }
  res
}

/*
* 2.7
* 同样是解决前一个练习的问题,但这次不使用循环。
* (提示:在Scaladoc中查看StringOps)
*/
def question7(s: String): Long = s.foldLeft(1.toLong) { _ * _ }

/*
* 2.8
* 编写一个函数product(s:String),
* 计算前面练习中提到的乘积
* 2.9
* 把前一个练习中的函数改成递归函数
*/
def product(s: String): Long = {
  if (s.length() == 1) {
    s(0) toLong
  } else {
    s(0).toLong * product(s.tail)
  }
}

/*
* 2.10
* 编写函数计算xn,其中n是整数,使用如下的递归定义:
*/
def question10(x: Int, n: Int): BigInt = {
  n match {
    case 0 => 1
    case n if n < 0 => 1 / question10(x, -n)
    case n if n % 2 == 0 => question10(x, n / 2) pow 2
    case n if n % 2 == 1 => x* question10(x, n -1)
  }
}

def main(args: Array [String]): Unit = {
  println(question10(2, 3))
}

}

时间: 2024-10-12 19:28:55

快学Scala课后习题答案的相关文章

快学scala 第十一章 操作符 读书笔记及习题答案代码

chapter 11 操作符 标签:快学scala 一.笔记 scala种可以在反引号中包含几乎任何字符序列, val 'val' = 42 所有的操作符都是左结合的,除了以冒号(:)结尾的操作符,和赋值操作符.用于构造列表的::操作符是又结合的.1::2::Ni1的意思是1::(2::Ni1),先创建出包含2的列表,这个列表又被作为尾巴拼接到以1作为头部的列表中. 2. 函数调用语法:f(arg1, arg2,...)扩展到可以应用于函数之外的值,如果f不是函数或方法,那么这个表达式等于f.a

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

1 简介 近期对Scala比较感兴趣,买了本<快学Scala>,感觉不错.比<Programming Scala:Tackle Multi-Core Complexity on the Java Virtual Machine>好很多. 是本不错的入门书.而且每个章节都设置了难度级别,每章有习题,可以巩固Scala语法. 本文的目的就是针对这些习题进行解答 2 基础 2.1 在Scala REPL中键入3,然后按Tab键.有哪些方法可以被应用? 这个....直接操作一遍就有结果了.

计算机组成原理_第四版课后习题答案(完整版)

计算机组成原理_第四版课后习题答案(完整版) ?第一章 1.?比较数字计算机和模拟计算机的特点. 解:模拟计算机的特点:数值由连续量来表示,运算过程是连续的: 数字计算机的特点:数值由数字量(离散量)来表示,运算按位进行. 两者主要区别见P1?表1.1. 2.?数字计算机如何分类?分类的依据是什么? 解:分类: 数字计算机分为专用计算机和通用计算机.通用计算机又分为巨型机.大型机. 中型机.小型机.微型机和单片机六类. 分类依据:专用和通用是根据计算机的效率.速度.价格.运行的经济性和适应性来划

快学scala笔记.

第一章 基础 val 定义的值实际上是一个常量 var 声明其值可变的变量 val xmax,ymax = 100 var greeting,message: String = null 1.3 常用类型 Scala的7种数值类型:Byte.Char.Short.Int.Long.Float和Double 1.toString() 2.to(10) "Hello".intersect("World") 1.4 算术和操作符重载 val answer = 8 * 5

C语言程序设计 第3版 课后习题答案 苏小红 王宇颖 孙志岗 版 实验题答案 高等教育出版社 课后答案 解析 第3章 课后答案

C语言程序设计 第3版 课后习题答案  苏小红 王宇颖 孙志岗  实验题答案 高等教育出版社 课后答案 解析 第3章 课后答案 C语言程序设计 苏小红 王宇颖 孙志岗 版 习题3 课后习题答案 前辅文第1章 为什么要学C 语言 课后习题答案1.1 引言1.2 游戏?黑客和C 语言1.3 C 语言,不老的传说1.4 C 语言的爱与恨1.5 C 语言教给我们的事1.6 什么是“编程”1.7 本章小结习题1第2章 C 数据类型 课后答案2.1 常量与变量2.1.1 常量2.1.2 变量2.2 简单的屏

快学Scala 第十九课 (trait的abstract override使用)

trait的abstract override使用: 当我看到abstract override介绍的时候也是一脸懵逼,因为快学scala,只介绍了因为TimestampLogger中调用的super.log依旧是个abstract class,所以必须在方法前加上abstract和override.但是并没有具体介绍如何使用,然后查阅了其他文档,才明白使用方法. 下面的代码定义了超类LoggerEmpty,这个定义意味着该特质只能混入扩展LoggerEmpty的类中. 在特质中声明抽象方法中有

《七周七语言:理解多种编程范型》のruby课后习题答案

本系列是<七周七语言>的课后习题答案.这本书不拘泥于语法细节,而是横向比较各种编程语言(非热门)之间的编程范式. 是本对编程觉悟能有所帮助的好书,这里就不多做介绍了,感兴趣的同学不妨去看一下. 不得不说,Ruby的风格很黑客. 1. 打印字符串"Hello, world." puts "Hello, world." 2. 在字符串“Hello, Ruby.”中,找出"Ruby."所在下标. puts "Hello, Ruby

《七周七语言:理解多种编程范型》のIo课后习题答案

哎,因为上周忙着写OAuth2.0服务端框架草稿 ,耽误了一周学习Io Language了. 本篇习题解答是接着 <七周七语言:理解多种编程范型>のRuby课后习题答案 Io是原型语言,类似于JavaScript,并不区别类和对象,所有的东东都是对象,对象的数据结构就是由键值表来维护的(在Io中就是所谓的槽),通过各种消息传递给对象来实现打印输出,复制对象等功能.因为语法非常简单(也木有语法糖),所以你可以尽情构建自己的库和功能. 第一天: 1. 对1+1求值,然后对1+"one&q

《鸟哥linux》--第十一章课后习题答案

1.在linux上可以找到哪些shell?哪个档案记录可用的shell?儿linux预设的shell是? 1./bin/bash,/bin/tcsh,/bin/csh 2./etc/shells 3.bash,亦即是/bin/bash 2.在shell环境下,有个提示符(prompt),他可以修改吗?要改什么?默认的提示符内容是? 可以修改,改PS1变量,这个PS1的变量默认的内容为:[\[email protected]\h\W]\$ 3.如何显示HOME这个变量 echo $HOME 4.如