de Haskell main
se limita a lo que quiero: evaluar cuando el archivo se carga por sí mismo (por ejemplo ./myfile.hs
o runhaskell myfile.hs
) y en ningún otro caso. main
no se ejecutará cuando el archivo sea importado por otro archivo. newLISP también tiene esta funcionalidad.¿Common Lisp equivalente a la función principal de Haskell? función
¿Hay código equivalente para Common Lisp?
leí el source code para CLISP. Esto es lo que sucede cuando el usuario entra o clisp myfile.lisp
./myfile.lisp
:
- CLISP ahorra
myfile.lisp
comop->argv_execute_file
. - CLISP crea la expresión
(LOAD "p->argv_execute_file")
y la empuja hacia la pila Lisp. - CLISP guarda cualquier argumento de línea de comandos adicional en una lista.
- CLISP almacena los argumentos en la variable Lisp
*args*
.
CLISP nunca comete una variable Lisp refiriéndose a p->argv_execute_file
, así que no hay manera de discernir si myfile.lisp
se cargó directamente, por parte del usuario en el REPL, o por otro fichero Lisp. Si solo (car *args*)
fuera myfile.lisp
, mi tarea sería fácil.
Nota: Shebangs dan problemas CLISP si el archivo se carga desde el REPL, por lo que poner este código en ~/.clisprc.lisp
:
(set-dispatch-macro-character #\# #\!
(lambda (stream character n)
(declare (ignore character n))
(read-line stream nil nil t)
nil))
¿Por qué necesita un equivalente a la función principal? –