Difficoltà con while

Professione: Pensionato
Software: Autocad
Regione: Lombardia
#1
Salve a tutti,
non riesco a far funzionare questo codice :
Codice:
                (setq pt4 (list (car pt4) (cadr pt4) 0.0))
                (setq pt5 (list (car pt5) (cadr pt5) 0.0))
                (setq Lato nil)
                
                (while
                    (or (/= Lato pt4) (/= Lato pt5))
                    (setq Lato (getpoint "\nClicca lo spigolo superiore sinistro o destro dell'apertura per posizione Gelosia"))

                    (princ "\n")
                    (princ "pt4 >>>>>> ")
                    (princ pt4)
                    (princ "\n")
                    (princ "pt5 >>>>>> ")
                    (princ pt5)
                    (princ "\n")
                    (princ "Lato >>>>> ")
                    (princ Lato)
                    (princ "\n")

                );;while
pt4 o pt5 sono effettivamente uguali a Lato ma il programma non prosegue.

pt4 >>>>>> (124.807 167.462 0.0) ******
pt5 >>>>>> (126.007 167.462 0.0)
Lato >>>>> (124.807 167.462 0.0) ******

Grazie anticipate per l'aiuto.
 

Cristallo

Utente Standard
Professione: Leggo e confronto
Software: Lettura critica
Regione: Fuori dalla cerchia
#2
Gia l'altra volta hai avuto difficolta con OR

OR valuta le espressioni e restituisce T (true) se UNA le condizioni è rispettata.
Se solo una in mezzo a 10 è rispettata, allora restituisce TRUE.
Poiché tu confronti Lato con due valori diversi (una volta con PT4 ed una con PT5), una delle due è sempre diversa, quindi OR è sempre TRUE e quindi il WHILW prosegue all'infinito.
 
Professione: Pensionato
Software: Autocad
Regione: Lombardia
#3
OK, ma allora quale condizione devo impostare per verificare che, se Lato è uguale a pt4 o pt5 , la condizione venga soddisfatta e il programma possa proseguire?
Grazie.
 

Cristallo

Utente Standard
Professione: Leggo e confronto
Software: Lettura critica
Regione: Fuori dalla cerchia
#4
Secondo me lo devi impostare proprio in maniera diversa, settando Lato a nil e poi una condizione
(if (= Lato nil)
(setq Lato (getpoint "\nClicca lo spigolo superiore sinistro o destro dell'apertura per posizione Gelosia"))
)

Facendo così aspetterà sempre un input punto e potrai prevenire input arbitrari attraverso un initget