<<快学Scala>> 第十九章 练习8 答案
来源:互联网 发布:阿里云数据库连接工具 编辑:程序博客网 时间:2024/09/21 09:19
package mucao.com
import scala.util.parsing.combinator.RegexParsers
import scala.collection.mutable.HashMap
object Calculator extends App{
var stop=false
var vars=new HashMapString,Int
println(“计算器:”)
var str=readLine().trim()
if(str.equals(“quit”))
stop=true
val parser=new ExprParser()
var result=parser.parseAll(parser.expr, str)
while(!stop){
if(str.matches(“^out\s*=\s*\w+”))
{
val key=str.split(“=”)(1)
result=parser.parseAll(parser.expr,key)
if(result.successful)
println(key+”=”+result.get)
else
println(“error!”)
}else{
result=parser.parseAll(parser.expr, str)
if(result.successful)
println(“=”+result.get)
else
println(“error!”)
}
str=readLine().trim()
if(str.equals(“quit”))
{
stop=true
println(“退出计算器!”)
}
}
}
class ExprParser extends RegexParsers {
val vars=new HashMapString,Int
val number=”-?[0-9]+”.r
val ident=”\w+”.r
def expr: Parser[Int] = term ~ rep((“+” | “-“) ~ term ^^ {
case “+” ~ t => t
case “-” ~ t => -t
}) ^^ {case t ~ r => t+r.sum}
def term: Parser[Int] = factor ~ rep((“*” | “/” | “%”) ~ factor ) ^^ {
case f ~ list => list.foldLeft(f)((a,b) => b._1 match {
case “” => a b._2
case “/” => a / b._2
case “%” => a % b._2
})
}
def factor: Parser[Int] = inner ~ rep(“^” ~> inner) ^^ {
case e ~ Nil => e
case e ~ list => math.pow(e,list.reduceRight((a,b) => math.pow(a,b).toInt)).toInt
}
def inner: Parser[Int] = number ^^ {_.toInt} | “(” ~> expr <~ “)” | variable
def variable: Parser[Int] = ident ~ opt("=" ~> expr) ^^ { case v ~ None => vars.get(v).getOrElse(0) case v ~ Some(r) => vars += v -> r ; r}
}
*测试**
计算器:
s
=0
s+r
=0
s=10
=10
e=8
=8
s+e
=18
h=s+e
=18
out=h
h=18
在网上搜索了好久,《快学Scala》第十八章以后的就基本没有练习题的答案了。好不容易找到一个第十九章的答案,发现练习8,9,10没有答案。最后决定自己写。
熬了一个下午终于做出来了这道题。。
如果有什么错误的地方,或者发现有哪些地方可以改进,再或者有更好的方案的话,都欢迎大家提出来,一起交流,一起学习。。
(也不知道会不会有人看 。。。。。)
- <<快学Scala>> 第十九章 练习8 答案
- 快学Scala 第三章习题答案
- 快学Scala 第四章习题答案
- 快学Scala 第六章习题答案
- 快学Scala 第三章习题答案
- 快学Scala 第四章习题答案
- 快学Scala第五章习题答案
- 快学Scala 第六章习题答案
- 快学Scala 第八章习题答案
- 快学 scala 第二章课后习题答案
- 快学Scala练习题答案-第2章
- 快学scala 第二章 读书笔记及习题答案代码
- 快学scala 第三章 读书笔记及习题答案代码
- 快学scala 第四章 读书笔记及习题答案代码
- 快学scala 第五章 读书笔记及习题答案代码
- 02 快学scala第二章习题答案
- 03 快学scala第三章习题答案
- 05 快学scala第五章习题答案
- [数据挖掘工具] R语言书籍的学习路线图(转自格物堂)
- 自定义组件使用总结
- [算法]移位与旋转
- POJ 3421
- Swift之分支
- <<快学Scala>> 第十九章 练习8 答案
- win 7下卸载Apache
- 与网络公司合作建站流程和注意事项
- 机器学习基石第五讲:training versus testing
- iOS开发之GCD -- dispatch_group
- CNNs学习笔记(5): CNNs详细理解 Part1
- (4.1.5.2)Android 粘性广播StickyBroadcast的使用
- Foxmail7.2如何调整存储目录,有效(不像其他吹牛的)
- leetcode--292. Nim Game