Newsgroup: it.comp.software.cad
Titolo: LISP sommare il valore di una variabile ad un numero?

Ciao, ho un errore in questa riga, la colpa č di tappeto...
tappeto č una variabile che contiene un numero
    (setq ppt1 (list (car pnt1) (+ (cadr ppasse1)(/ (+ tappeto 80) 2)) ))
quale comando mi serve per sommare il valore di tappeto al numero 80?
-- 
^__^
o.g.a.v.o.s. [Onorevoli  Grazie  A  Voi  Ohhh  Saggi]


Sembra tutto normale; a me funziona.
Qual è il tipo di errore? Ti esce un messaggio di errore o è il 
risultato che non quadra?
In quest'ultimo caso controlla eventualmente il tipo di numero di 
tappeto (intero/decimale): il risultato cambia!
Maci


Ciao, grazie per l'attenzione,
a mè da questo errore:
errore: il tipo di argomento è errato
(+ TAPPETO 80)
(/ (+ TAPPETO 80) 2)
(+ (CADR PPASSE1) (/ (+ TAPPETO 80) 2))
(LIST (CAR PNT1) (+ (CADR PPASSE1) (/ (+ TAPPETO 80) 2)))
(SETQ PPT1 (LIST (CAR PNT1) (+ (CADR PPASSE1) (/ (+ TAPPETO 80) 2))))
^__^

 (SETQ PPT1 (LIST (CAR PNT1) (+ (CADR PPASSE1) (/ (+ TAPPETO 80) 2))))
Se sicuro che tappeto sia un numero e non una stringa contenente delle 
stringhe?
10 è diverso da "10"...
Ciao
-- 
Emiliano - Webmaster di EmiCAD® - Tutto per AutoCAD e ProgeSOFT® IntelliCAD
e-mail:  
webm...@emicad.it
web:  
www.emicad.it
 


...scusate l'intrusione.. ma perchè non lasciate perdere il LISP ed 
utilizzate il VBA che è molto più umano e comprensibile? 


Ciao,
da parte mia:
- Squadra che svinciucchia (ogni tanto ;-P) non si cambia.
- Quanto costa VB?
^__^


...uhmmm forse...
  (PRINC "\n---------------------------------------------------------")
;DESCRIZIONE
  (initget 1 "400 500 600 800")
  (setq tappeto (getstring "\n400=(solo in Piano,Conca,Conca
Supportata)\n500=(solo in Piano,Conca,Conca Supportata)\n600=(solo in
Piano,Conca,Conca Supportata,T=Terna)\n800=(solo in Piano,T=Terna)\n"))
;DESCRIZIONE
...ed ora? quale comando debbo usare per sommare il valore della variabile?
^__^


nulla... č incluso in Autocad (ALT+F11) 

>Se sicuro che tappeto sia un numero e non una stringa contenente delle

Beh, direi che getstring acquisice una *stringa*.
Prova a fare un
(type tappeto)
vedrai che restituisce "STR"
Devi convertire la stringa in numero, per esempio in questo modo
(setq tappeto (atoi (getstring "\n400=(solo in Piano,Conca,Conca
Supportata)\n500=(solo in Piano,Conca,Conca Supportata)\n600=(solo in
Piano,Conca,Conca Supportata,T=Terna)\n800=(solo in Piano,T=Terna)\n")))
Nell'altra funzione poi, anziché dividere per 2, dividi per 2.0: in questo modo il risultato diventerà un numero reale.
Mantenedo numeri interi (tappeto e divisore 2), per il fine che ti proponi (coordinate di un punto), otterresti un errore in caso di tappeto dispari.
Ciao
Maci

 Mantenedo numeri interi (tappeto e divisore 2), per il fine che ti proponi
(coordinate di un punto), otterresti un errore in caso di tappeto dispari.
Grazie Maci, così funziona:       (setq ppt1 (list (car pnt1) (+ (cadr
ppasse1)(/ (+ (atoi tappeto) 80) 2)) ))
metto atoi quì perchè ho anche:
(setq rullo (strcat tipo tappeto))
...
(command "_insert" rullo pru1 "" "" "" )
e se tappeto diventasse un numero avrei dei problemi nell'inserire il
simbolo rullo vero?
...altra domanda:
io inizio con:
  (textscr)                    ;commuta in modo testo
  (repeat 50 (terpri))          ;scrive una nuova riga per n volte dove n è
il numero di righe da pulire
  (PRINC "\nNastro serie TN TIPO:")     ;DESCRIZIONE
  (PRINC "\n---------------------------------------------------------")
;DESCRIZIONE
  (initget 1 "C c P p CS cs cS Cs T t")
  (setq tipo (getstring "\nP=Piano             (400-500-600-800)\nC=Conca
(400-500-600)\nCS=Conca Supportata (400-500-600)\nT=Terna
(600-800)\n")) ;DESCRIZIONE
  (repeat 2 (terpri))
;scrive una nuova riga per n volte dove n è il numero di righe da pulire
  (PRINC "\nNastro serie TN LARGHEZZA:")     ;DESCRIZIONE
  (PRINC "\n---------------------------------------------------------")
;DESCRIZIONE
  (initget 1 "400 500 600 800")
  (setq tappeto (getstring "\n400=(solo in Piano,Conca,Conca
Supportata)\n500=(solo in Piano,Conca,Conca Supportata)\n600=(solo in
Piano,Conca,Conca Supportata,T=Terna)\n800=(solo in Piano,T=Terna)\n"))
;DESCRIZIONE
  (repeat 2 (terpri))
;scrive una nuova riga per n volte dove n è il numero di righe da pulire
  (graphscr)
e pensavo che initget 1 facesse proseguire solamente se riceve in risposta
quello previsto dentro le "..." ma così non è...
sai come posso fare (infatti tappeto non può e deve essere mai dispari, nè
diverso da 400 500 600 o 800).
Grazie ^__^


Vero; però, anche se più avanti dici che tappeto può essere solo uno dei 
numeri prefissati, dividi per 2.0 e non per 2. Ottieni un risultato con 
numero reale.
Nella sostanza non cambierà niente.
Nel metodo è più corretto".

getstring è l'unica funzione di input che non riconosce initget.
Devi usare "getkword".
Maci