Seleccion con and dentro de un while....

Ver el tema anterior Ver el tema siguiente Ir abajo

Seleccion con and dentro de un while....

Mensaje por eliasp el Miér Oct 05, 2016 8:46 pm

Que tal, buen día a todo el foro. Luego de una involuntaria pero obligada ausencia por cuestiones académicas, ya es el año de no usar nada de lisp. Estoy retomando el rumbo. Inicio con un programita, que según yo está bastante sencillo, pero me di cuenta que estoy más oxidado de lo que pensaba. Obviamente, todo esto es contra reloj, por eso acudo a ustedes. La rutina es ésta:
Código:

(vl-load-com)
(defun c:xdibuja()
  (initget 129 "Izquierdo Derecho Ambos Salir")
  (while
    (setvar "OSMODE" 1)
    (/=(setq texto (getkword "\n Dibujar en: [Izquierdo Derecho Ambos Salir] <Salir>: "))"Salir")
    (If (and
     (/= texto "Izquierdo")
     (/= texto "Derecho")
     (/= texto "Ambos")
     (/= texto "Salir")
     )
      )
    )
  (cond
    ((= texto "Izquierdo")(alert "Ejecuta Izq"))
    ((= texto "Derecho")  (alert "Ejecuta Der"))
    ((= texto "Ambos")    (alert "Ejecuta Ambos"))
    )
  )
Obviamente, es sólo el principio, pero desde ahí me atoré.... jajajaja. La idea es poder seleccionar una de las opciones. Al seleccionar "salir" debe salirse del programa.
Espero puedan echarme una mano...

Saludos y gracias.

eliasp

Mensajes : 56
Fecha de inscripción : 17/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Seleccion con and dentro de un while....

Mensaje por robierzo el Jue Oct 06, 2016 8:47 am

Yo lo haría así:
Código:
(vl-load-com)
(defun c:xdibuja()
  (setq texto nil)
  (setvar "OSMODE" 1)
  (while (= texto nil)
    (initget 129 "Izquierdo Derecho Ambos Salir")
    (setq texto (getkword "\n Dibujar en: [Izquierdo Derecho Ambos Salir] <Salir>: "))
   
    (cond ((and (/= texto "Izquierdo")(/= texto "Derecho")(/= texto "Ambos")(/= texto "Salir")(/= texto ""))
     (setq texto nil)
     )
     ((= texto "")
     (setq texto "Salir")
     )
    );fin COND
  );fin WHILE
 
  (cond
    ((= texto "Izquierdo")(alert "Ejecuta Izq"))
    ((= texto "Derecho")  (alert "Ejecuta Der"))
    ((= texto "Ambos")    (alert "Ejecuta Ambos"))
  );fin COND
);fin DEFUN

Como no existe condición para la posibilidad de que texto = "Salir", simplemente el programa termina, pues no hay nada después.

Yo prefiero hacerlo de esa manera. aunque puedes incluir el comando (exit). Pero eso lleva implícito hacer una función *error* para que salga de forma limpia.
avatar
robierzo

Mensajes : 41
Fecha de inscripción : 17/03/2016
Localización : La Coruña

Ver perfil de usuario http://www.selmotopografia.es

Volver arriba Ir abajo

Re: Seleccion con and dentro de un while....

Mensaje por eliasp el Jue Oct 06, 2016 4:35 pm

Gracias Marco, es lo que necesito, pero.... (siempre hay un pero, verdad) necesito que después de seleccionar una acción, por ejemplo "Izquierda".... haga lo que tenga que hacer y regrese a preguntar otra vez. El asunto es que estoy trabajando con secciones transversales y se van a ampliar con esas condiciones, unas a la izquierda, otras a la derecha y otras en ambos lados. Por lo pronto, voy a tratar de corregir.

Saludos y gracias

eliasp

Mensajes : 56
Fecha de inscripción : 17/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Seleccion con and dentro de un while....

Mensaje por nolo el Jue Oct 06, 2016 4:45 pm

Otra solución es utilizar el progn para obtener la última respuesta de una serie de instrucciones
Por ejemplo, simplificando
Código:
(defun c:xd()
(setvar "OSMODE" 1)
(while (progn
 (initget 129 "Izquierdo Derecho Ambos Salir")
 (setq texto (getkword "\n Dibujar en: [Izquierdo Derecho Ambos Salir] <Salir>: "))
 (cond
     ((= texto "Izquierdo")(alert "Ejecuta Izq") t)
     ((= texto "Derecho")  (alert "Ejecuta Der") t)
     ((= texto "Ambos")    (alert "Ejecuta Ambos") t)
     (t (princ "\nHasta luego Lucas ......") nil)
     )
))
(princ)
)
La T de true y el nil se pueden obviar si la función a la que llama da true o nil según convenga

Un saludo

nolo

Mensajes : 111
Fecha de inscripción : 17/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Seleccion con and dentro de un while....

Mensaje por eliasp el Jue Oct 06, 2016 4:47 pm

Perfecto..... Muchas gracias

Saludos

eliasp

Mensajes : 56
Fecha de inscripción : 17/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Seleccion con and dentro de un while....

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.