Red de conocimiento informático - Computadora portátil - 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.

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 XX (.../...)) Todo lo que está dentro de los corchetes después de XX son variables locales; todo lo que está fuera de los corchetes son variables globales. Las variables antes de la barra diagonal en las variables locales son las variables independientes de la función y las variables después de la barra diagonal no son las variables independientes de la función. Por ejemplo

(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.