Haskell解决逆波兰式
摘自<Haskell趣学指南- Learn You a Haskell for Great Good>
{-
逆波兰式(revese polish notation, RPN): 操作符出现在操作数的后面,而不是夹在它们中间. 如我们使用 "4 3 +" 而不是 "4 + 3".
-}
solveRPN :: String -> Double
solveRPN = head . foldl foldingFunction [] . words
where foldingFunction (x:y:ys) "*" = (y * x ) : ys
foldingFunction (x:y:ys) "+" = (y + x ) : ys
foldingFunction (x:y:ys) "-" = (y - x ) : ys
foldingFunction (x:y:ys) "/" = (y / x ) : ys
foldingFunction (x:y:ys) "^" = (y ** x ) : ys
foldingFunction (x:xs) "ln" = (log x ) : xs
foldingFunction xs "sum" = [sum xs]
foldingFunction xs numberString = read numberString : xs
*Main> :l solveRPN.hs
[ of ] Compiling Main ( solveRPN.hs, interpreted )
Ok, modules loaded: Main.
*Main> solveRPN "2 3.5 +"
5.5
*Main> solveRPN "2 3.5 -"
-1.5
*Main> solveRPN "1 2 /"
0.5
*Main> solveRPN "3 2 *"
6.0
*Main> solveRPN "3 2 ^"
9.0
*Main> solveRPN "3 2 sum"
5.0
*Main> solveRPN "3 2 1 2sum"
*** Exception: Prelude.read: no parse
*Main> solveRPN "3 2 1 2 sum"
8.0
*Main> solveRPN "2.7 ln"
0.9932517730102834
*Main> solveRPN "2.7 ln 1 sum"
1.9932517730102834
*Main>
编译hs文件:
$ghc --make file_name
不编译解释运行:
$runghc file_name.hs
Haskell解决逆波兰式的更多相关文章
- javascript:逆波兰式表示法计算表达式结果
逆波兰式表示法,是由栈做基础的表达式,举个例子: 5 1 2 + 4 * + 3 - 等价于 5 + ((1 + 2) * 4) - 3 原理:依次将5 1 2 压入栈中, 这时遇到了运算符 + ...
- [LeetCode]Evaluate Reverse Polish Notation(逆波兰式的计算)
原题链接:http://oj.leetcode.com/problems/evaluate-reverse-polish-notation/ 题目描述: Evaluate the value of a ...
- HDU1237 简单的计算器 【堆】+【逆波兰式】
简单的计算器 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- c# 逆波兰式实现计算器
语文不好,不太会组织语言,希望不要太在意. 如题,先简要介绍一下什么是逆波兰式 通常我们在写数学公式的时候 就是a+b+c这样,这种表达式称为中缀表达式,逆波兰式又称为后缀表达式,例如a+b 后缀 ...
- python 逆波兰式
逆波兰式,也叫后缀表达式 技巧:为简化代码,引入一个不存在的运算符#,优先级最低.置于堆栈底部 class Stack(object): '''堆栈''' def __init__(self): se ...
- codechef Transform the Expression 转换成逆波兰式
版权声明:本文作者靖心,靖空间地址:http://blog.csdn.net/kenden23/.未经本作者同意不得转载. https://blog.csdn.net/kenden23/article ...
- NYOJ 35 表达式求值(逆波兰式求值)
http://acm.nyist.net/JudgeOnline/problemset.php?typeid=4 NYOJ 35 表达式求值(逆波兰式求值) 逆波兰式式也称后缀表达式. 一般的表达式求 ...
- Evaluate Reverse Polish Notation(逆波兰式)
Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...
- HDU1237 简单计算器 【栈】+【逆波兰式】
简单计算器 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
随机推荐
- stack+DFS ZOJ 1004 Anagrams by Stack
题目传送门 /* stack 容器的应用: 要求字典序升序输出,所以先搜索入栈的 然后逐个判断是否满足答案,若不满足,回溯继续搜索,输出所有符合的结果 */ #include <cstdio&g ...
- WPF之TextBox
1. TextBox实现文字垂直居中 TextBox纵向长度比较长但文字字体比较小的时候,在输入时就会发现文字不是垂直居中的. 而使用中我们发现,TextBox虽然可以设置文字的水平对齐方式,但却没有 ...
- access-Control-Allow-Origin跨域请求安全隐患
最新的W3C标准里是这么实现HTTP跨域请求的,Cross-Origin Resource Sharing,就是跨域的目标服务器要返回一系列的Headers,通过这些Headers来控制是否同意跨域. ...
- 在线代码格式化,在线JSON校验格式化
在线代码格式化 http://tool.oschina.net/codeformat/json 在线JSON校验格式化 http://www.kjson.com/ 两个好用工具
- topcoder SRM 591 DIV2 TheArithmeticProgression
#include <iostream> #include <cstdlib> using namespace std; class TheArithmeticProgressi ...
- 【wikioi】1049 棋盘染色(迭代深搜)
http://www.wikioi.com/problem/1049/ 这题我之前写没想到迭代加深,看了题解,然后学习了这种搜索(之前我写的某题也用过,,但是不懂专业名词 囧.) 迭代加深搜索就是限制 ...
- 用C语言实现素数筛法获取一亿(100000000)以内的全部素数
具体筛法是:先把n个自然数按次序排列起来.1不是质数,也不是合数,要划去.第二个数2是质数留下来,而把2后面所有能被2整除的数都划去.2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数 ...
- 创建自定义 jQuery 移动主题
自定义页面.工具栏.内容.表单元素.列表.按钮等元素的外观 智能电话和平板设备的高采用率最终导致增加了对移动 Web 开发人员和设计师的需求.jQuery Mobile 框架支持您创建能与原生应用程序 ...
- nodejs 更新最新版本
sudo npm cache clean -f sudo npm install -g n sudo n stable
- [转]如何:定义和处理 SOAP 标头
本文转自:http://msdn.microsoft.com/zh-cn/library/vstudio/8728chd5(v=vs.100).aspx 本主题专门介绍一项旧有技术.现在应通过使用以下 ...