swartzrock / learningscalamaterials Goto Github PK
View Code? Open in Web Editor NEWSupplementary materials for the "Learning Scala" book from O'Reilly Media
License: MIT License
Supplementary materials for the "Learning Scala" book from O'Reilly Media
License: MIT License
In chapter One, 3rd assignment question, it is mentioned to half the result before converting back to centigrade but in solution, res0 is not halved.
Actual result is Double = 2.361111111111111 but result present in solution is Double = 22.5
Hello,
First off, great book.
Second, OpenWeather's API changed so you need an API key now. Unfortunately, at least from my testing, the API does not return the same results as displayed in Chapter 6 making those sections/exercises difficult to understand what is supposed to be happening.
In chapter 7 it appears to work if I manually call cityTempe, but otherwise the code itself as written doesn't appear to execute. If I call cityTemp("Scottsdale")
and hit save multiple times within the Eclipse IDE or command line, it will show up eventually every fifth or sixth time.
def cityTemp(name: String): Double = {
val url = "http://api.openweathermap.org/data/2.5/weather?appid=[APIKEY]"
val cityUrl = s"$url&q=$name"
val json = io.Source.fromURL(cityUrl).mkString.trim
val pattern = """.*"temp":([\d.]+).*""".r
val pattern(temp) = json
temp.toDouble
} //> cityTemp: (name: String)Double
val cityTemps = Future sequence Seq(
Future(cityTemp("Fresno")), Future(cityTemp("Tempe"))
) //> cityTemps : scala.concurrent.Future[Seq[Double]] = List()
cityTemps onSuccess {
case Seq(x,y) if x > y => println(s"Fresno is warmer: $x K")
case Seq(x,y) if x < y => println(s"Tempe is warmer: $y K")
}
Thoughts?
For exercise 3 in chapter 1 we have to half value, but in answer it's not halved.
Answer
Using parentheses around the subtraction, which needs to occur before the multiplication and division, will give it highest precedence.
scala> 22.5 * 9 / 5 + 32
res0: Double = 72.5
scala> (res0 - 32) * 5 / 9
res1: Double = 22.5
In Chapter 7 exercise 1.c, as the first 100 of fibonacci numbers will exceed 64bits numbers, you can't use Int but also Long too! See the result below(The answer here just show first 60 numbers which is OK):
fib: (a: Long, b: Long)Stream[Long]
1,1,2,3,5,8,13,21,34,55
89,144,233,377,610,987,1597,2584,4181,6765
10946,17711,28657,46368,75025,121393,196418,317811,514229,832040
1346269,2178309,3524578,5702887,9227465,14930352,24157817,39088169,63245986,102334155
165580141,267914296,433494437,701408733,1134903170,1836311903,2971215073,4807526976,7778742049,12586269025
20365011074,32951280099,53316291173,86267571272,139583862445,225851433717,365435296162,591286729879,956722026041,1548008755920
2504730781961,4052739537881,6557470319842,10610209857723,17167680177565,27777890035288,44945570212853,72723460248141,117669030460994,190392490709135
308061521170129,498454011879264,806515533049393,1304969544928657,2111485077978050,3416454622906707,5527939700884757,8944394323791464,14472334024676221,23416728348467685
37889062373143906,61305790721611591,99194853094755497,160500643816367088,259695496911122585,420196140727489673,679891637638612258,1100087778366101931,1779979416004714189,2880067194370816120
4660046610375530309,7540113804746346429,-6246583658587674878,1293530146158671551,-4953053512429003327,-3659523366270331776,-8612576878699335103,6174643828739884737,-2437933049959450366,3736710778780434371
We can verify this using the following code:
val test: Long = 4660046610375530309l + 7540113804746346429l
val maxLong = Long.MaxValue
val max: BigInt = BigInt(2).pow(63) - 1
val big: BigInt = BigInt(4660046610375530309l) + BigInt(7540113804746346429l)
The output is:
test: Long = -6246583658587674878
maxLong: Long = 9223372036854775807
max: BigInt = 9223372036854775807
big: BigInt = 12200160415121876738
As we can see use BigInt will fix the overflow problem:
fib: (a: BigInt, b: BigInt)Stream[BigInt]
1,1,2,3,5,8,13,21,34,55
89,144,233,377,610,987,1597,2584,4181,6765
10946,17711,28657,46368,75025,121393,196418,317811,514229,832040
1346269,2178309,3524578,5702887,9227465,14930352,24157817,39088169,63245986,102334155
165580141,267914296,433494437,701408733,1134903170,1836311903,2971215073,4807526976,7778742049,12586269025
20365011074,32951280099,53316291173,86267571272,139583862445,225851433717,365435296162,591286729879,956722026041,1548008755920
2504730781961,4052739537881,6557470319842,10610209857723,17167680177565,27777890035288,44945570212853,72723460248141,117669030460994,190392490709135
308061521170129,498454011879264,806515533049393,1304969544928657,2111485077978050,3416454622906707,5527939700884757,8944394323791464,14472334024676221,23416728348467685
37889062373143906,61305790721611591,99194853094755497,160500643816367088,259695496911122585,420196140727489673,679891637638612258,1100087778366101931,1779979416004714189,2880067194370816120
4660046610375530309,7540113804746346429,12200160415121876738,19740274219868223167,31940434634990099905,51680708854858323072,83621143489848422977,135301852344706746049,218922995834555169026,354224848179261915075
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.