Por ejemplo, #'functionname
, es necesario?¿Qué significa # en LISP
Respuesta
# functionname 'en Common Lisp
Common Lisp y algunos otros dialectos Lisp tiene más de un espacio de nombres. Aquí los de funciones y valores son diferentes. Para obtener el valor función de un nombre, tenemos que escribir:
(function functionname)
Dado que es un poco largo para escribir, hay una notación más corta:
#'functionname
para mostrar el efecto ver esto:
(let ((foo 42))
(flet ((foo() 'bar))
(list foo (function foo) #'foo (foo))))
anterior define una variable local FOO
y una función localFOO
. La sentencia de la lista devuelve el valor de FOO
, entonces el valor de la función de foo
usando la notación (function ...)
, entonces lo mismo usando la notación lado corto y luego el valor de realidad llamando a la función FOO
.
(function foo)
y #'foo
son el mismo concepto, pero se escriben de manera diferente. Ambos se refieren a la función léxica local llamada FOO
. FOO
es introducido por el formulario FLET
como una función local .
El Lisp REPL devuelve algo como esto:
(42 #<function FOO 4060008224> #<function FOO 4060008224> BAR)
anterior muestra que el primer elemento es realmente el valor de la variable FOO
y los dos siguientes artículos son la función valora, la función de salto a FOO
. El último elemento es el símbolo BAR
, como se devuelve desde la llamada de función (FOO)
.
Esta separación de espacios de nombres para valores normales y valores de función está presente en Common Lisp, Emacs Lisp e ISLisp. Otros dialectos de Lisp como Scheme no tienen esa separación. En Scheme, un nombre solo puede denotar un valor.
El carácter #.
El carácter #
se usa para introducir una sintaxis especial en s-expressions. Aquí hay algunos ejemplos:
#'functionname -> (function functionname)
#(1 2 3) -> the vector of the elements 1 2 3
#c(1 2) -> a complex number
#xFFFF -> a hex number
#b1111 -> a binary number
y muchos más. #
es un llamado carácter macro de despacho.
ANSI Common Lisp HyperSpec describe el carácter #
en Section 2.4.8 Sharpsign.
Common Lisp podría haber usado una sintaxis diferente para los vectores. Diga [1 2 3]
. También podría haber usado una sintaxis diferente para números complejos. Algo así como {1 2}
. Pero no hace eso. ¿Por qué? La razón es porque Common Lisp intenta ser económico con el uso de caracteres en el lenguaje y deja caracteres como [
, ]
, {
y }
al usuario para sus propias extensiones de sintaxis. A menudo, los usuarios de Lisp desarrollan lenguajes incrustados y, para hacerlo un poco más fácil, el estándar Common Lisp intenta mantener el uso de caracteres al mínimo y también proporciona el mecanismo de los macro caracteres y el despacho de caracteres macro.
Para mantener el uso del carácter hacia abajo, se utiliza un solo carácter de envío #
y el siguiente carácter determina lo que se puede denotar. #b
para números binarios. #x
para números hexadecimales. #c
para números complejos. #(
para vectores. #'
para nombres de funciones. Además de muchos más
Como Common Lisp es un lenguaje de programación programable, el usuario puede cambiar la sintaxis de este nivel de caracteres. Ver la función SET-DISPATCH-MACRO-CHARACTER.
- 1. ¿Qué significa [...] # en emacs-lisp?
- 2. ¿Qué hace | 5E | significa en Common Lisp?
- 3. ¿Qué significa que "Lisp se puede escribir en sí mismo?"
- 4. ¿Qué significa (interactivo) en una función Emacs Lisp?
- 5. ¿Qué significa el código fuente^L in (Emacs Lisp)?
- 6. ¿Qué significa "?" significa en Java?
- 7. ¿Qué significa '??' significa en C#?
- 8. ¿qué significa "$ &" significa en Ruby
- 9. ¿Qué significa la convención doble menos (-) en nombres de funciones en Emacs Lisp
- 10. ¿Qué significa "babosa" significa
- 11. ¿Qué significa Field.Index.NOT_ANALYZED_NO_NORMS significa
- 12. ¿Qué significa ('../') significa?
- 13. ¿Qué significa "1"? significa en Perl?
- 14. ¿Qué significa "% .6d" significa en printf
- 15. ¿Qué significa @! significa en un De declaración
- 16. ¿Qué significa '$?' significa en scripts bash?
- 17. ¿Qué significa "rc" significa en archivos punto
- 18. ¿Qué significa $ _ en PowerShell?
- 19. ¿Qué significa ~ en C++?
- 20. ¿Qué significa @@ en Ruby?
- 21. ¿Qué significa "\" en Perl?
- 22. ¿Qué significa # en Mathematica?
- 23. Qué significa * en XAML
- 24. ¿Qué significa ** en C
- 25. En sass, ¿qué significa =
- 26. ¿Qué significa/* en sql?
- 27. ¿Qué significa ': ..' en Haskell?
- 28. ¿Qué significa [] en JavaScript?
- 29. ¿Qué significa "en desuso"?
- 30. ¿Qué significa "&" en C++?
ha proporcionado un excelente artículo! ¡Lo encontré justo cuando lo necesitaba! – TheGeeko61