Cómo define CAD Lisp las variables globales y las variables locales para garantizar que las variables se puedan pasar entre el programa principal y los subprogramas, y que la memoria se libere cuando finalice el programa.
(defun try (x / y)
(setq y (* x x))
(setq z (+ x y z))
)
En el ejemplo, x, y son variables locales y z es una variable global. La x antes de la barra diagonal de la variable local es la variable dependiente de la función try, y la y después de la barra diagonal no es la variable dependiente.
Llamar
(setq x 1 y 2 z 3)
(try 4)
Cuando se ejecuta la función try, x = 4, y = 16, z = 3, el valor de retorno de la función es 4 + 16 + 3 = 23
Los valores de las variables después de ejecutar el programa son x = 1, y = 2, z = 23. Después de llamar a la función, el valor de la variable local no cambia, pero el valor de la variable global cambia. Se puede considerar que las variables locales con el mismo símbolo dentro de una función y las variables globales fuera de la función son variables diferentes, mientras que las variables globales con el mismo símbolo dentro y fuera de la función son la misma variable.
Además, las funciones con c: delante del nombre de la función no pueden tener variables independientes, es decir, la función c:XX solo puede tener la forma
( defun c:XX ( / .. ....))
No hay argumentos de función en la fórmula. Un programa con significado similar al ejemplo anterior se puede escribir como
(defun try (/ x y)
(setq x 4)
(setq y ( * x x))
(setq z (+ x y z))
)
Es un poco prolijo escribir así, no sé si puede resolverlo.