¿Cómo puedo obtener los argumentos de línea de comando en (específicamente en GNU, si hay alguna diferencia) Common Lisp?Obtención de argumentos de línea de comando en Common Lisp
Respuesta
Supongo que está scripting con CLisp. Se puede crear un archivo que contiene
#! /usr/local/bin/clisp
(format t "~&~S~&" *args*)
hacerlo ejecutable mediante la ejecución de
$ chmod 755 <filename>
Correr da
$ ./<filename>
NIL
$ ./<filename> a b c
("a" "b" "c")
$ ./<filename> "a b c" 1 2 3
("a b c" "1" "2" "3")
http://cl-cookbook.sourceforge.net/os.html proporciona una cierta penetración
(defun my-command-line()
(or
#+CLISP *args*
#+SBCL *posix-argv*
#+LISPWORKS system:*line-arguments-list*
#+CMU extensions:*command-line-words*
nil))
es lo que busca, creo.
(o FOO nil) es equivalente a FOO, ¿no es así? –
Sí, pero cuando tienes tu FOO condicionalmente leído, es posible que tengas un retroceso. Pero, entonces, el valor de (o) es, no del todo sorprendente, NIL (así como el valor de (y) es T). – Vatine
¿Estás hablando de Clisp o GCL? Parece que en GCL los argumentos de línea de comando se pasan en si::*command-args*
.
En SBCL, podemos usar sb-ext: * posix-argv * para obtener el argv del script de lisp común. El sb-ext: * posix-argv * es una lista que contiene todos los argumentos, el primer arg es el nombre de archivo del script.
No estoy seguro de que esto funcione más. Aparece el mensaje de error' Símbolo 'POSIX-ARGV' no encontrado en el paquete SB-EXT. ' – Langston
debería ser sb-ext: * posix-argv *, en el texto anterior, el \ * algo \ * funcionaba como un estilo. Lo siento. –
Como se ve en https://stackoverflow.com/a/1021843/31615, cada implementación tiene su propio mecanismo. La forma habitual de tratar esto es utilizar una biblioteca contenedora que presente una interfaz unificada para usted.
Dicha biblioteca puede proporcionar más ayuda no solo para leer cosas, sino también para convertirlas y proporcionar resultados útiles para el usuario. Un paquete bastante completo es CLON (no debe confundirse con CLON o CLON, lo siento), el Command Line Options Nuker, que también trae una amplia documentación. Hay otros, sin embargo, si sus necesidades son más livianas, por ejemplo, command-line-arguments y apply-argv.
Los paquetes en quicklisp para estos se denominan net.didierverna.clon
, command-line-arguments
y apply-argv
, respectivamente.
- 1. Desenrolle/argumentos splat en Common Lisp
- 2. Argumentos de línea de comando en python.
- 3. Secuencias en Common Lisp?
- 4. Webdevelopment en Common Lisp
- 5. Asociación en Common Lisp
- 6. Common Lisp a Lisp-n?
- 7. Obtención de argumentos de línea de comando en una aplicación Qt
- 8. ¿Hay algún comando para detener al intérprete en Common Lisp?
- 9. Programación de Common Lisp Parallel
- 10. Especificadores de tipo Common Lisp
- 11. Ejercicios de Common Lisp/Problemas
- 12. Argumentos de línea de comando de autocompletado
- 13. argumentos de línea de comando con leiningen
- 14. argumentos de línea de comando pase powershell
- 15. Función de persistencia en Common Lisp
- 16. Introspección de clase en Common Lisp
- 17. Almacenamiento de fechas en Common Lisp
- 18. Transposición de listas en Common Lisp
- 19. Uso de etiquetas en Common Lisp
- 20. Eliminación de un tipo en Common Lisp
- 21. Predijo Common Lisp
- 22. Best Common Lisp IDE
- 23. Dibujando árboles en Common Lisp
- 24. Renombrando lambda en Common Lisp
- 25. División entera en Common Lisp?
- 26. Determinación de la lista de argumentos de función en Common Lisp
- 27. Restablecer el estado en Common Lisp
- 28. Common Lisp Tiempo de compilación y ejecución
- 29. embellecedor de código fuente para lisp (Common Lisp, Scheme, Clojure)
- 30. Conexión de .NET a Common Lisp
el enlace en esta publicación ya no es viable. :( – masukomi
esto es súper genial, pero ¿cómo puedo hacer los datos de las cadenas? Mi función se utiliza para entradas como esta (única '(abccdddef)) y no funciona con cadenas: O .. traté de (mapcar # 'make-symbol * args *) pero eso no parece hacer el trabajo –