{"id":29,"date":"2007-07-28T21:59:07","date_gmt":"2007-07-29T04:59:07","guid":{"rendered":"http:\/\/www.elbeno.com\/haskell_soe_blog\/?p=29"},"modified":"2008-01-07T22:08:50","modified_gmt":"2008-01-08T06:08:50","slug":"exercise-75","status":"publish","type":"post","link":"https:\/\/www.elbeno.com\/haskell_soe_blog\/?p=29","title":{"rendered":"Exercise 7.5"},"content":{"rendered":"<pre lang=\"haskell\">data Expr = C Float\r\n          | V String\r\n          | Expr :+ Expr\r\n          | Expr :- Expr\r\n          | Expr :* Expr\r\n          | Expr :\/ Expr\r\n          | Let String Expr Expr\r\n            deriving Show\r\n\r\nevaluate :: Expr -> [(String, Float)] -> Float\r\nevaluate (C x) _ = x\r\nevaluate (V x) vars = lookup x vars\r\n    where lookup i [] = error \"Unbound variable\"\r\n          lookup i ((a,b):vars) = if i == a then b else lookup i vars\r\nevaluate (e1 :+ e2) vars = (evaluate e1 vars) + (evaluate e2 vars)\r\nevaluate (e1 :- e2) vars = (evaluate e1 vars) - (evaluate e2 vars)\r\nevaluate (e1 :* e2) vars = (evaluate e1 vars) * (evaluate e2 vars)\r\nevaluate (e1 :\/ e2) vars = (evaluate e1 vars) \/ (evaluate e2 vars)\r\nevaluate (Let s e1 e2) vars = let es = evaluate e1 vars \r\n                              in evaluate e2 ((s, es):vars)<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>data Expr = C Float | V String | Expr :+ Expr | Expr :- Expr | Expr :* Expr | Expr :\/ Expr | Let String Expr Expr deriving Show evaluate :: Expr -> [(String, Float)] -> Float evaluate (C x) _ = x evaluate (V x) vars = lookup x vars where lookup [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/www.elbeno.com\/haskell_soe_blog\/index.php?rest_route=\/wp\/v2\/posts\/29"}],"collection":[{"href":"https:\/\/www.elbeno.com\/haskell_soe_blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.elbeno.com\/haskell_soe_blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.elbeno.com\/haskell_soe_blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.elbeno.com\/haskell_soe_blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=29"}],"version-history":[{"count":0,"href":"https:\/\/www.elbeno.com\/haskell_soe_blog\/index.php?rest_route=\/wp\/v2\/posts\/29\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.elbeno.com\/haskell_soe_blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=29"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.elbeno.com\/haskell_soe_blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=29"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.elbeno.com\/haskell_soe_blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=29"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}