user2276280
user2276280

Reputation: 601

Scheme syntax error when recursing

I'm writing a recursive function that will convert an expression from prefix to infix. However, I need to add in a check to make sure part of the input is not already in infix.

For example, I may get input like (+ (1 + 2) 3). I want to change this to ((1 + 2) + 3)

Here is what I have so far:

 (define (finalizePrefixToInfix lst)
      ;Convert a given s-expression to infix notation
     (define operand (car lst))
     (define operator1 (cadr lst))
     (define operator2 (caddr lst))    
     (display lst)
     (cond 
         ((and (list? lst) (symbol? operand));Is the s-expression a list?
        ;It was a list. Recusively call the operands of the list and return in infix format
        (display "recursing")
        (list (finalizePrefixToInfix operator1) operand (finalizePrefixToInfix operator2))
    )
    (else (display "not recursing") lst);It was not a list. We can not reformat, so return.
)

)

However, this is giving me syntax errors but I cant figure out why. Any help?

Upvotes: 0

Views: 46

Answers (1)

Óscar López
Óscar López

Reputation: 236112

You have to check to see if the lst parameter is a list at the very beginning (base case), otherwise car and friends will fail when applied to an atom. Try this:

(define (finalizePrefixToInfix lst)
  (cond ((not (pair? lst)) lst)
        (else
         (define operand   (car lst))
         (define operator1 (cadr lst))
         (define operator2 (caddr lst))    
         (cond 
           ((symbol? operand)
            (list (finalizePrefixToInfix operator1)
                  operand
                  (finalizePrefixToInfix operator2)))
           (else lst)))))

Upvotes: 2

Related Questions