Lisp: Código parar convertir expresión infija a prefija Programación, Tecnológico - 16 de March de 2008 | 12:07 am | 2 Comentarios



Pues como prometí postear todo código que programara en IA, les dejo el primero. Sirve para convertir de inorden a preorden.

(set 'OP '

(

(* 2)

(/ 2)

(+ 1)

(- 1)

)

)

(define (ordenaPreorden IN)

(INPRE IN '() '()))

(define (INPRE IN PRE PILA)

(cond

((or (empty? IN) (= nil IN) (not (list? IN)))

(append (reverse PILA) PRE)

)

(true (set 'ULTIMO (last IN))

(begin

(cond

((list? (last IN))

(set 'PRE (append (INPRE (last IN) '() ' ()) PRE))

)

( (integer? ULTIMO)

(set 'PRE (cons ULTIMO PRE))

)

(true

( begin

(set 'IN_OP (HAYOPERADOR (assoc ULTIMO OP)))

(set 'OP_PILA (HAYOPERADOR (assoc (first PILA) OP)))

(cond

((<= IN_OP OP_PILA)

(set 'TOPPILA (first PILA))

(set 'PILA (rest PILA))

(set 'PRE (cons TOPPILA PRE))

)

)

(set 'PILA (cons ULTIMO PILA))

)

)

)

(INPRE (QUITARULTIMO IN) PRE PILA)

)

)

)

)

(define (QUITARULTIMO LISTA)

(reverse (rest (reverse LISTA)))

)

(define (HAYOPERADOR OP)

(cond

((not (list? OP)) 0)

(true

(first (rest OP))

)

)

)

Lisp es un lenguaje muy loco, cuesta un poco agarrarle la onda. Ya que uno piensa en un problema y ya sabe como resolverlo de manera estructurada, pero con Lisp es otro paradigma.



2 Responses to “Lisp: Código parar convertir expresión infija a prefija”

  1. Pao says:

    yo se los explico :| todo el codigo :D :|

  2. jonasjob says:

    solo mierdas publica o le entiendo nada de nada ademas java no compilaria eso…… byebye

Leave a Reply