Assignment 4: A Postfix Calculator in Haskell ¶
2 + 3
52-3*
23+ 1/2 + 1/3
1 2 / 1 3 / +
3 * (5 – 2)
23+
23+
+
Required Code¶
Token
data Token = Num Double | …
Num Double Token
%02%lleksaH02%ni02%rotaluclaC02%xfi.trsoelPp02mi%sA0h2cu%_m402ma%trngeomrnpgirsusoA/ystfnoetmsuecroDe/thtnaregkav/msresU///:elfi :daol ot deliaf eliF nac ereh eciohc doog a dna ,uoy ot pu era siht fo sliated tcaxe ehT .nekot
fo dnik rehto hcae rof rotcurtsnoc a dda dluohs uoy ,taht retfA .nwohs sa epyt atad ruoy fo trap eb tsum dna ,nekot a si rebmun A
:siht ekil margorp ruoy ni denfied dellac epyt atad a evah tsum uoy os dna ,snekot fo tsisnoc snoisserpxe xfitsoP
.5 rebmun eht tsuj sniatnoc kcats eht won oS .mus rieht sehsup neht dna kcats eht fo stnemele owt pot eht spop , ,nekot driht ehT .kcats eht otno dehsup si 3 neht dna ,kcats eht otno dehsup si 2 tsrfi , etaulave ot ,kcats ytpme na htiw gnitrats ,oS
.kcats eht otno tluser eht gnihsup dna ,kcats eht morf smeti erom ro eno gnippop sevlovni yllausu sihT .kcats eht ot ti ylppa neht ,rotarepo na si nekot eht fI .kcats eht otno ti hsup ,rebmun a si nekot eht fI
:snekot erom on era ereht litnu selur eseht ylppa dna ,thgir ot tfel morf ,emit a ta eno snekot eht ni daer uoy , ekil noisserpxe na etaulave oT .snekot sdloh taht kcats a dna snekot fo maerts a deen uoy ,noisserpxe xfitsop a etaulave oT
.secaps on sniatnoc dna ,rebmun a htiw trats t’nseod taht ,sretcarahc ,erom ro ,1 fo gnitsisnoc gnirts a si rotarepo na fo eman ehT .woleb denfied era srotarepo eht llA .kcats eht ot gnihtemos seod taht noitcnuf a si rotarepo nA .srotarepO .seulav elbuoD lleksaH era esehT .srebmuN
:swollof sa snekot enfied ew ,tnemngissa siht roF
.xfitsop ni nettirw eb dluow noisserpxe xfini eht ,elpmaxe roF .selur ecnedecerp rotarepo yna esu t’nod dna ,stekcarb esu t’nod snoisserpxe xfitsoP
.xfitsop ni nettirw eb dluow noisserpxe xfini ehT . sa gnihtemaseht.e.i,5otsetaulave noisserpxexfitsopeht,elpmaxeroF
.sdnarepo eht retfa semoc rotarepo eht .e.i ,noitaton xfitsop gnisu nettirw era snoisserpxe ,rotaluclac xfitsop a nI .woleb debircsed snoitarepo eht fo lla stnemelpmi taht ,rotaluclac xfitsop a etaerc ot si ksat ruoy ,tnemngissa siht nI
» noitatnemucod 9102remmus383 | suoiverp | txen xedni
noitagivaN
calcStack
calcStack :: String -> String calcStack
calc :: String -> String
calc calcStack
calc calcStack
Error Handling¶
calc calcStack
Maybe
Maybe
topStack :: [a] -> Maybe a
Token
Nothing
Err String
%02%lleksaH02%ni02%rotaluclaC02%xfitsoP02%A02%_402%tnemngissA/stnemucoD/tnargav/sresU///:elfi :daol ot deliaf eliF
.egassem rorre etairporppa na htiw denruter eb nac eulav nekot laiceps siht srucco rorre na nehW . dellac epyt eht ot eulav rorre laiceps a dda ot si redisnoc ot tnaw thgim uoy gnildnah rorre rof aedi dnoces ehT
.tnemele pot on sah dna ytpme saw kcats ereht snaem hcihw , ro ,)kcats eht fo tnemele pot eht .e.i( tsil eht fo daeh eht rehtie si tluser eht dna ,tsil a sa detnemelpmi eb ot demussa si kcats ehT
:siht ekil kcats a fo tnemele pot eht snruter taht noitcnuf a tnemelpmi ot esu thgim uoy ,ecnatsni
roF .snoitcnuf rof stuptuo ro stupni emos rof epyt eht sa desu eb nac
,tsriF .srorre eldnah ot tnaw thgim uoy woh tuoba snoitseggus owt era ereH
.srorre gnildnahrofygetartsatuobaknihtdluohsuoyoS.rorrenaesuacrevennac snoitarepo dna eht,evobadenoitnemsA.erehwynatsomla rucco dluoc 0 yb noisivid ekil srorre ro ,snoisserpxe dettamrof yldilavni retnedluocresueht:rotaluclacynafotraptnatropminasignildnahrorrE
.elbadaer erom margorp ruoy ekam ot stnemmoc esu dna ,snoitcnuf level-pot lla rof serutangis epyt edulcni esaelP
!elpoep rehto ro bew eht morf edoc/srewsna ypoc t’noD .flesruoy etirw t’ndid uoy taht edoc ynaesutonoddna,)ekiluoyfignitsetroftahtesunacuoy—kcehCkciuQ roftpecxe(seludomlleksaHynatropmitonoD.flesruoyetorwuoy edoc ot dna ,edulerp lleksaH dradnats eht ni snoitcnuf ot kcitS .elbadaer ylhgih dna ,tneicffie ylbanosaer ,trohs ,elpmis ,raelc si taht edoc ecruos lufituaeb etirw ot miA .deen uoy snoitcnuf repleh rehto yna etirw nac uoY
.rorre na esuac reve dluohs meht fo rehtieN .sesac lla ni sgnirts elbadaer dna dettamrof yltaen nruter taht snoitcnuf level-resu eb ot tnaem era dna htoB
.0 uoy evig ylbaborp lliw erawtfos gnikram eht,esiwrehtO!snoitcnufderiuqeresehtfoserutangisehtegnahct’noD
.”kcats ytpme“ sa hcus egassem a nruter dluohs ti ,)tnemele pot on sah os dna( ytpme si kcats gnitluser eht fI
:erutangis siht evah tsum tI .)gnirts a sa( kcats eht fo tnemele pot eht tsuj snruter ti tpecxe , ot ralimis si taht , dellac noitcnuf a edulcni osla tsum uoY
.dessecorpneebevahgnirts tupni eht morf snekot eht lla retfa ,gnirts a sa ,kcats eritne eht si tuptuo eht dna ,snekot detarapes-ecaps fo gnirts a si ot tupni ehT
:erutangis gniwollof eht htiw dellac noitcnuf a edulcni osla tsum uoY
Postfix Operators¶
inc
inc
dec
sqrt
sin
cos
inv
+
+ *
42* *
–
+
–
.rorre na si stnemele 2 naht rewef htiw kcats a no gnillaC
%02%lleksaH02%ni02%rotaluclaC02%xfitsoP02%A02%_402%tnemngissA/stnemucoD/tnargav/sresU///:elfi :daol ot deliaf eliF
”2-“ ot setaulave ”- 4 2“ ,”2“ ot setaulave ”- 2 4“ .g.e
)!thgir redro eht teg ot erus ekam( ecnereffid rieht sehsup dna kcats eht fo stnemele owt pot eht spop :
.rorre na si stnemele 2 naht rewef htiw kcats a no gnillaC ”8“ ot setaulave .g.e
tcudorp rieht sehsup dna kcats eht fo stnemele owt pot eht spop : .rorre na si stnemele 2 naht rewef htiw kcats a no gnillaC
.kcats eht fo pot no pu sdne 6 oS .tluser eht sehsup dna ,rehtegot meht sdda ,kcats eht fo stnemele 2 pot eht spop ehT .dehsup si 2 neht dna ,kcats eht otno dehsup si 4 tsrfi ,”+ 2 4“ etaulave oT
”6“ ot setaulave ”+ 2 4“ .g.e mus rieht sehsup dna kcats eht fo stnemele owt pot eht spop :
”ytinfinI“ ot setaulave ”vni 0“ ,”3333333333333333.0“ ot setaulave ”vni 3“ .g.e
:yranib era srotarepo gniwollof ehT
”4544006694299989.0-“ ot setaulave ”soc 3“ .g.e
”2768950800021141.0“ ot setaulave ”nis 3“ .g.e
”2778865708050237.1“ ot setaulave ”trqs 3“ .g.e
”1“ ot setaulave ”ced ced 3“ ,”2“ ot setaulave ”ced 3“ .g.e
.enod er’yeht nehw tluser rieht hsup dna ,kcats eht morf stupni rieht teg yeht :yaw emas eht ni krow lla woleb srotarepo ehT
.pot eht no 4 htiw pu sdne kcats eht oS .tluser eht sehsup dna ,ti ot 1 sdda ,)dehsup tsuj saw taht 3 eht si hcihw( kcats eht fo pot eht spop nehT .kcats eht otno dehsup si 3 tsrfi ,detaulave si ”cni 3“ noisserpxe eht nehW
”5“ ot setaulave ”cni cni 3“ ,”4“ ot setaulave ”cni 3“ .g.e
.yaw lareneg dna lufthguoht emos ni srorre eldnah uoy ees ot tnaw od ew tub ,saedi eseht tnemelpmi ot deen t’nod uoY
:yranu era srotarepo gniwollof ehT
/
/
/ +all
1 2 3 4 +all
+all
*all
dup
pop
4 +all
4 *all
1 2 3 4 *all
*all
pop clear
clear swap
swap
4 dup dup
4 dup *
Examples ¶
> calc “2 sqrt 3 sqrt +”
calc
> calc “1 2 + 3 *”
“9.0”
> calc “1 2 3 * +”
“7.0”
“3.1462643699419726”
%02%lleksaH02%ni02%rotaluclaC02%xfitsoP02%A02%_402%tnemngissA/stnemucoD/tnargav/sresU///:elfi :daol ot deliaf eliF
”61“ ot setaulave
kcats eht fo tnemele pot eht sevomer : .rorre na si kcats ytpme na no gnillaC ;kcats eht fo pot no si ”4 4“ , retfa .g.e
. gnillac fo selpmaxe emos era ereH
.rorre na si stnemele 2 naht rewef htiw kcats a no gnillaC
”3- ” ot setaulave ”- paws 1 4“ ;”4 1“ era kcats eht fo stnemele 2 pot eht ,”paws 1 4“ retfa .g.e
kcats eht fo stnemele owt pot eht fo redro eht segnahc : .kcats ytpme eht snruter kcats ytpme na no gnillaC ytpme si kcats eht ,”raelc 3 2 1“ retfa .g.e
kcats eht morf stnemele lla sevomer : .rorre na si kcats ytpme na no gnillaC ”4“ si kcats eht fo pot eht ,”pop 5 4“ retfa .g.e
kcats eht fo tnemele pot eht fo ypoc a sehsup :
:kcats eht fo stnetnoc eht etalupinam srotarepo gniwollof ehT
.rorre na si kcats ytpme na no gnillaC
”4“ ot setaulave ,”42“ ot setaulave .g.e
)nekot rebmun-non tsrfi eht ro ,kcats eht fo dne eht ta gnippots( kcats eht fo pot eht no srebmun eht lla seilpitlum :
.rorre na si kcats ytpme na no gnillaC
”4“ ot setaulave ,”01“ ot setaulave .g.e
)nekot rebmun-non tsrfi eht ro ,kcats eht fo dne eht ta gnippots( kcats eht fo pot eht no srebmun eht lla sdda :
.rorre na si stnemele 2 naht rewef htiw kcats a no gnillaC .snruter rotarepo
lleksaHehtrevetahweraseulavdenrutereht,0ybnoisividroF ”NaN“ ot setaulave ”/ 0 0“ ,”ytinfinI“ ot setaulave
”/ 0 2“ ,”2-“ ot setaulave ”/ 4 2“ ,”2“ ot setaulave ”/ 2 4“ .g.e
)!thgir redro eht teg ot erus ekam( tneitouq rieht sehsup dna kcats eht fo stnemele owt pot eht spop :
callStack
show Token
> calc “11 dup *”
“121.0”
> calc “0 5 /”
“0.0”
> calc “5 0 /”
“Infinity”
> calc “2 3 + 4 2 +all”
“11.0”
> calc “2 3 + 4 2 *all”
“40.0”
> calc “2 3 + 4 2 clear”
“empty stack”
> calc “2 3 inc * pop”
“empty stack”
> calc “3.2 sin dup * 3.2 cos dup * +”
“1.0”
> calc “2 +”
“+: not enough args”
> calc “dec”
“dec: empty stack”
What to Submit¶
a4.hs
Hints ¶
> words ” 2 3 inc * pop ”
[“2″,”3″,”inc”,”*”,”pop”]
Double
Token
t Num 5
words
“3.14” :: Double
show t <5>
“3.14”
Show
instance Show Token where
show (Num n) = “<" ++ (show n) ++ ">”
…
show Token
.llew %02sa%llekpsyatH02%ni0r2u%oryotfalouctlsaeCr02e%htxfirtsofoPs0n2oi%tAa0u2q%e_402%tntenmengmieslspA/msitndelmuuochosD/utnoarYgav/sresU///:elfi :daol ot deliaf eliF
.elbadaer erom si kniht uoy taht tamrof tnereffid a ni rebmun a wohs ylniatrec nac uoY .rebmun raluger a ton dna nekot a si siht taht raelc ti ekam ot tsuj dedda era stekcarb-elgna nehT . gnirts eht snruter neht , si fI
:.g.e ,epyt
eht rof fo ecnatsni na etaerc uoy fi gniggubed htiw pleh lliw tI
.41.3 eht ot gnirts eht trevnoc lliw daer noisserpxe ehT
:.g.e ,sgnirts fo tsil a otni sdrow gnirts-ecaps fo gnirts a strevnoc noitcnuf lleksaH dradnats ehT
.savnaC no ti timbus dna deman elfi elgnis a otni edoc ruoy lla tup esaelp ,krow ruoy timbus ot emit si ti nehW
.kcats eht fo pot eht etacidni ylraelc ot erus eb ; rof noitatnemelpmi ruoy nopu dneped lliw ekil skool taht tahw dna ,snekot fo kcats eritne eht eb lliw rof tuptuo ehT
.yako era stamrof egassem rorre rehto ,daer ot ysae dna raelc era yeht sa gnol sA .ereh nwohs sa yltcaxe eb ot deen t’nod segassem rorre ruoY
Table Of Contents
Previous topic Next topic Quick search
dc
$ dc
23 + 5 * p 25
p
man dc
%02%lleksaH02%ni02%rotaluclaC02%xfitsoP02%A02%_402%tnemngissA/stnemucoD/tnargav/sresU///:elfi :daol ot deliaf eliF
.9.7.1xnihpSgnisudetaerC.nosdlanoDyboT,9102thgirypoC©
erom rof enildnammoc xuniL eht ta
tnecer tsom eht fo tluser eht .e.i ,kcats eht fo tnemele pot eht stnirp
:elpmaxe roF .stluser ruoy kcehc ot esu nac uoy rotaluclac xfitsop a si dnammoc xuniL ehT
.tuptuo sa kcats defiidom a nruter dna ,tupni sa kcats a ekat yeht taht si rotaluclac xfitsop a rof snoitcnuf eht tuoba kniht ot yaw lufesu A
» noitatnemucod 9102remmus383 | suoiverp | txen xedni
oG
lleksaHnirotaluclaCxfitsoPA:4tnemngissA
.noitamrofni epyT .noitaluclac
noitagivaN
5 tnemngissA lleksaH:4tnemngissA
stniH timbuS ot tahW selpmaxE srotarepO xfitsoP gnildnaH rorrE edoC deriuqeR