Hi guys, I'm new to Haskell, I learn it for couple of months now and we've learned only simple functions like map, zip etc. But now my assignment is a lot tougher than I thought so I'll need some guidelines. I've googled my assignment and I saw a person with the exact assignment so I am gonna copy the task then I'm gonna show you what I've done so far. Here it is: Make calculator function. The function argument is a list of strings and also form such list, as each string of the argument made definite action. - If the string has the form of an arithmetic expression - calculate this expression. The string result becomes part of the list- result. If the expression contains a variable which is not assigned value, the result is displayed "undefined". - If the string has the form Name = value calculated from the last expression is assigned to the variable with the corresponding name in the list, and in the result list is formed a string with type name = ... where the site stands blank corresponding value. If there is not a calculated expression to be assigned to form a string "no value". - If the string is non-blank, but there is a species different from the above two case, form the string "error". - If the string is empty, incl. when it contains only spaces, in the result there is not form a string. Expressions consist of integers without sign variables, operations + (Addition), - (subtraction), * (multiplication) and / (divide) In the beginning, end or between the elements of each row can have spaces - they are irrelevant to its correctness.
Example: the list-argument ["3 +7 / 2", "2 + x", "= s", "2 * s +4", "", "2 + +4 / 5"] function should provide a result-list ["6", "undefined", "s = 6", "16", "error"]. ========= So what I've done so far is: calculator [] = [] calculator [" "] = [] calculator [c] = [c] calculator (c:" ":cs) = c:calculator cs calculator (" ":cs) = calculator cs calculator (c:" ":" ":cs) = calculator (c:" ":cs) calculator (c:cs) | (head c `elem` ['a'..'z']) && (head(tail c) `elem` ['+','-','*','/']) && (last(take (length c-2)c) `elem` ['1','2','3','4','5','6','7','8','9']) = calculator cs | otherwise = "error":calculator cs I try at first to use pattern matching for the blank strings in the first list, so that I can get rid off them in the second list. Am I even on the right way here? I found the "elem" function and I'm trying to check if the first char of the string is a letter or a number, then if the second char is one of the operations and so on. Problem is that I have no idea how can I check if the variable is defined already or how to save a variable and then give that variable the new value - is that even possible? :] And another thing `elem` [1..9] isn't working - how can I make a single char of a string to hold an integer.. Could you give me some guidelines or at least tell me if I'm on the right way here so I can move forward and improve my program. Thanks a lot!
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe