On Jul 7, 2006, at 8:57 AM, Sara Kenedy wrote:

Hello everybody,

I checked the topics in Haskell-Cafe about prefix/infix operators but
I did not find them. Now I bring my questions to here to ask you.

1) I have a Common-Lisp code representing an expression result as follows
((MPLUS SIMP)
          ((MTIMES SIMP) ((RAT SIMP) 1 2) ((MEXPT SIMP) $X 2))
          ((MTIMES SIMP) ((RAT SIMP) 1 3) ((MEXPT SIMP) $X 3)))

2) I attempted to change it to mathematics operators, replacing

MPLUS SIMP -> +
MEQUAL SIMP -> =
RAT SIMP       -> /
MEXPT SIMP -> ^

[snip some code]

3) And NOW I want to transfer from prefix operator into infix
operator, for example: From
((+)
  ((*) ((/) 1 2) ((^) x 2))
  ((*) ((/) 1 3) ((^) x 3)))

in to the expression: 1/2*x^2+1/3*x^3

I try to figure out it, but this time it is not successfully. If you
are familiar with that, please share with me. Many thanks to all.

If I were approaching this problem, I'd probably think of it like a very small compiler. That is, I would 1) define the abstract syntax as a algebraic data type 2) parse the S-expression into the abstract syntax and 3) pretty-print the new concrete syntax with infix operators.

Even for a language as small as this one, I think the benefits of approaching the problem in a modular way outweigh the overhead. I think it would be very difficult to get, eg, operator precedence correct by just doing text manipulations on the string.

Of course, since the source is s-expressions anyway, there's always the option of writing a lisp macro to do the whole thing and thereby get parsing for free.


As a mostly related aside, here's a cool looking tutorial google turned up about writing a scheme interpreter in Haskell:

http://halogen.note.amherst.edu/~jdtang/scheme_in_48/tutorial/ overview.html



Rob Dockins

Speak softly and drive a Sherman tank.
Laugh hard; it's a long way to the bank.
          -- TMBG


_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to