acad hispano
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

Seleccion con and dentro de un while....

3 participantes

Ir abajo

Seleccion con and dentro de un while.... Empty Seleccion con and dentro de un while....

Mensaje por eliasp 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 : 195
Fecha de inscripción : 17/03/2016

Volver arriba Ir abajo

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

Mensaje por robierzo 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.
robierzo
robierzo

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

http://www.selmotopografia.es

Volver arriba Ir abajo

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

Mensaje por eliasp 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 : 195
Fecha de inscripción : 17/03/2016

Volver arriba Ir abajo

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

Mensaje por nolo 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 : 182
Fecha de inscripción : 17/03/2016

Volver arriba Ir abajo

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

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

Perfecto..... Muchas gracias

Saludos

eliasp

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

Volver arriba Ir abajo

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

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Volver arriba

- Temas similares

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