Lisp: Código parar convertir expresión infija a prefija

Escrita en: Mar 16, 2008 // Programación, Tecnológico.

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.

Un comentario- Quieres decir algo?

  1. Pao

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

Pingbacks/Trackbacks

Deje un comentario

Recuerda que puedes decir lo que quieras. Aunque los insultos no me afectan en lo más minimo, no se permiten pues afectan aquellas personas que dejan un comentario serio.