Foros del Web » Programación para mayores de 30 ;) » Programación General »

Problema con programa en Lisp

Estas en el tema de Problema con programa en Lisp en el foro de Programación General en Foros del Web. Que tal! tengo un problema con este programa me marca un error del tipo Parse Error: End of File. Si alguien me pudiera auxiliar se ...
  #1 (permalink)  
Antiguo 13/12/2008, 20:12
 
Fecha de Ingreso: junio-2008
Mensajes: 36
Antigüedad: 15 años, 10 meses
Puntos: 0
Problema con programa en Lisp

Que tal! tengo un problema con este programa me marca un error del tipo

Parse Error: End of File.

Si alguien me pudiera auxiliar se los agradecería...

Saludos...

(defun myc ()

(prog (q historia) ; inicializa la cola y los posibles movimientos
(setq posibles '((0 2 1) (0 1 1) (1 1 1) (1 0 1) (2 0 1)))
(setq q (list (list (list '(3 3 1) '(0 0 0)))))
repeat ; este bucle se repite hasta que está vacía la orilla izquierda

(cond ((equal (caaar q) '(0 0 0))
(return (display (reverse (car q)))))

; desecha un camino si da lugar a canibalismo
; o representa un bucle

((or (comido (caar q)) (member (casar q) historia))
(setq q (cdr q))
(go repeat))
)

; ahora añade este estado a la historia y pasa
; al siguiente estado

(setq historia (cons (caar q) historia))
(setq q (append (expandir (car q) posibles) (cdr q)))
(go repeat)
]
(defun comido (estado)

; esta función comprueba si existe canibalismo examinando
; la orilla izquierda (car estado). Si allí M es 1 0 2
; y M <>C, entonces hay canibalismo en una u otra orilla.
; Si no, no hay en ninguna.

(and (or (equal (caar estado) 1) (equal (caar estado) 2))
(not (equal (caar estado) (cadar estado)))
]
(defun expandir (caminos posibles)

; esta función desarrolla todos los posibles movimientos
; a partir del estado actual.

(cond ((null posibles) nil)
((movcorrecto (car mover) (car posibles))
(cons (cons (camino (mover (car camino) (car posibles)) camino)
(expandir camino (cdr posibles))))
(t (expandir camino (cdr posibles)))
(defun movcorrecto (estado unmovimiento)

; aquí se resta el número de misioneros y caníbales
; que hay en el bote del número que queda
; en la orilla actual, para asegurarse que no se cogen
; más de los que hay.

(cond ((zerop (caddar estado)) ; ve si bote en la derecha
(restatodo (cadr estado) unmovimiento))
(t (restatodo (car estado) unmovimiento))
(defun restatodo (triple unmovimiento)

; esta función resta loa tres números de un movimiento
; del bate del contenido de una orilla y devuelve
; nil si cualquiera de Las diferencias es <0

(not (minusp (apply 'min (mapcar ' - triple unmovimiento)
]
(defun mover (estado unmovimiento)

; esta función realiza un movimiento restando
; los números de un movimiento del bote de una orilla
; y sumándolos a la otra.

(cond ((zerop (caddar estado))

; comprueba si bote en la derecha
(list (mapcar '+ (car estado) unmovimiento) (mapcar '- (cadr estado) unmovimiento)))
(t (list (mapcar '- (car estado) unmovimiento) (mapcar '+ (cadr estado) unmovimiento)))
]
(defun display (path)

; esta función presenta la solución resultante
(con ((null camino) 'end)
(t (print (car camino))
(terpri)
(display (cdr camino))
]
  #2 (permalink)  
Antiguo 14/12/2008, 05:22
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con programa en Lisp

La pinta (por el mensaje de error) es que tienes algún paréntesis mal cerrado. En concreto creo que tienes más de uno que está mal cerrado.

Por otro lado, te recomendaría NO usar superparéntesis.
  #3 (permalink)  
Antiguo 14/12/2008, 09:00
 
Fecha de Ingreso: junio-2008
Mensajes: 36
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Problema con programa en Lisp

Perdona la ignorancia que es un superparéntes?...
Gracias
  #4 (permalink)  
Antiguo 14/12/2008, 09:03
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con programa en Lisp

Los ] que usas para cerrar en algunos sitios.

No todos los Lisp los soportan, e incluso en los que sí los soportan, nunca se ha considerado una buena idea.
  #5 (permalink)  
Antiguo 14/12/2008, 11:47
 
Fecha de Ingreso: junio-2008
Mensajes: 36
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Problema con programa en Lisp

Que tal!! modifique lo que me recomendaste pero ahora me sale como resultado esto...

Read in : (defun myc () (prog (q historia) (setq posibles '((0 2 1) (0 1 1) (1 1 1) (1 0 1) (2 0 1))) (setq q (list (list (list '(3 3 1) '(0 0 0))))) repeat (cond ((equal (caaar q) '(0 0 0)) (return (display (reverse (car q)))))) ((or (comido (caar q)) (member (casar q) historia)) (setq q (cdr q)) (go repeat)) (setq historia (cons (caar q) historia)) (setq q (append (expandir (car q) posibles) (cdr q))) (go repeat) (defun comido (estado)) (and (or (equal (caar estado) 1) (equal (caar estado) 2)) (not (equal (caar estado) (cadar estado)))) (defun expandir (caminos posibles)) (cond ((null posibles) ()) ((movcorrecto (car mover) (car posibles)) (cons (cons (camino (mover (car camino) (car posibles)) camino) (expandir camino (cdr posibles)))))) (t (expandir camino (cdr posibles))) (defun movcorrecto (estado unmovimiento)) (cond ((zerop (caddar estado)) (restatodo (cadr estado) unmovimiento))) (t (restatodo (car estado) unmovimiento)) (defun restatodo (triple unmovimiento)) (not (minusp (
apply 'min (mapcar '- triple unmovimiento) (defun mover (estado unmovimiento))))) (cond ((zerop (caddar estado))) (list (mapcar '+ (car estado) unmovimiento) (mapcar '- (cadr estado) unmovimiento))) (t (list (mapcar '- (car estado) unmovimiento) (mapcar '+ (cadr estado) unmovimiento))) (defun display (path)) (con ((null camino) 'end) (t (print (car camino)) (terpri) (display (cdr camino))))))

Value: myc


¿Esto significa un error?...lo que pasa es q es la primera vez que manejo LISP, estoy usando APTERYX para compilarlo....tienes alguna idea de que me puede ocasionar este mensaje..o eso significa que compilo bien...

Te lo agradezco!! Gracias por tu aporte...
  #6 (permalink)  
Antiguo 14/12/2008, 13:58
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con programa en Lisp

Apteryx? Pero eso es de hace un millón de años, ¿no? Te recomendaría que buscaras un Lisp más actual.

De todos modos, no, eso no es un error. Lo único que está diciendo es que ha cargado el código y ha devuelto el valor de la definición de myc
Vamos, que sí, está bien.
  #7 (permalink)  
Antiguo 15/12/2008, 08:50
 
Fecha de Ingreso: junio-2008
Mensajes: 36
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Problema con programa en Lisp

Caray!! jeje..bueno tu me puedes recomendar uno actual...y una pregunta...este programa es el de los canibales y los misioneros no sé si lo conoces..quisiera ver el resultado en pantalla o no se si hubiera una forma...¿podre compilar mi programa tal y como esta con el compilador que me recomiendas?...

Por tu aporte...Gracias

Saludos
  #8 (permalink)  
Antiguo 16/12/2008, 02:37
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con programa en Lisp

Tienes unos cuantos para elegir. Puedes probar SBCL, CLISP, PLT... AllegroCL es un Lisp comercial muy bueno y tiene una versión gratuita si te registras.

En cuanto a lo de compilar tu programa, quizá deberías seguir algún tutorial o curso.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:17.