cg-Cad

Lisp »Tips 'n Tricks »Come incrementare un parametro

Ecco come fare per passare ad una funzione un parametro incrementato in modo regolare:

(defun funz ( i j / str)
 (setq str (strcat "\nTest[" (itoa i) "]=" (rtos j 2 3)))
 (princ str)
)

(defun c:test ( / stepMx stepMn stepMm frame
                  rapp clock str i
 )
 (setvar "cmdecho" 0)
 (setq stepMx 100 stepMn 30 frame 100)
 (setq stepMm (- stepMx stepMn)) ; 70 passi
 (setq rapp (/ 1 (* 1.0 frame)))
 (setq clock 0)
 (setq i 0)
 (while (< i frame)
  (setq clock (+ clock rapp))
  (funz i (* stepMm clock))
  (setq i (1+ i))
 )
 (setvar "cmdecho" 1)
 (princ)
)

Test del Lisp

Command: test
Test[0]=0.7
Test[1]=1.4
Test[2]=2.1
...
Test[97]=68.6
Test[98]=69.3
Test[99]=70

Con (setq stepMx 1000 stepMn 121 frame 444)
Command: test
...
Test[441]=875.041
Test[442]=877.02
Test[443]=879

Talvolta il parametro 'x' varia all'interno di un intervallo definito da una formula, ad esempio x>0 e x<n-k+2:

(defun funz ( i j / str)
 (setq str (strcat "\nTest[" (itoa i) "]=" (rtos j 2 3)))
 (princ str)
)

(defun c:test (/ k steps n incr inter i )
 (setvar "cmdecho" 0)
 (setq steps 100)
 (initget (+ 1 2 4)) ; k>0  
 (setq k (getint "\nk? "))
 (while 
  (progn
   (initget (+ 1 2 4)) ; n>0 
   (setq n (getint "\nn? "))
   (if (>= n k) nil T)
  )
 )
 (setq incr (/ (+ (- n k) 2)(- (* 1.0 steps) 1)))
 (setq inter 0)
 (setq i 0)
 (while (< i steps)
  (funz i inter)
  (setq inter (+ inter incr))
  (setq i (1+ i))
 )
 (setvar "cmdecho" 1)
 (princ)
)

Test del Lisp

Command: test
k? 3
n? 2
n? 5

Test[0]=0
Test[1]=0.04
Test[2]=0.081
...
Test[97]=3.919
Test[98]=3.96
Test[99]=4

Lisp »Tips 'n Tricks

Ultimo Aggiornamento_Last Update: 24 Giugno 2005