Common Lisp und einige andere Lisp-Dialekte haben mehr als einen namespace. Hier die Funktionen und Werte sind die anders. Um die Funktion Wert ein name ist, wir müssen schreiben:
(function functionname)
Da, dass ist ein bisschen lang zu schreiben, es ist eine kürzere Schreibweise:
Oben definiert lokale variableFOO und ein lokale FunktionFOO.
Die list-Anweisung gibt die Wert von FOO, dann die Funktion Wert von foo mit der (function ...) notation, dann das gleiche mit der short-hand notation und dann den Wert der eigentlich Aufruf der Funktion FOO.
(function foo) und #'foo sind das gleiche Konzept, aber unterschiedlich geschrieben. Beide beziehen sich auf die lokale lexikalische Funktion namens FOO. FOO eingeführt wird, durch die FLET form als lokale Funktion.
Oben zeigt, dass der erste Artikel ist wirklich der Wert der Variablen FOO und die nächsten zwei Elemente sind die Funktion Werte, die Funktion gebunden FOO. Das Letzte Element ist das symbol BAR, wie von der Funktion zurückgegeben rufen (FOO).
Diese Trennung der Namensräume für normale Werte und die Funktion der Werte ist in Common Lisp, Emacs Lisp und ISLisp. Andere Lisp-Dialekte wie Scheme nicht über diese Trennung. Im Schema kann ein name nur Bezeichnung eines Wertes.
Das Zeichen"#".
Den # Zeichen wird verwendet, um einzuführen, die spezielle syntax von s-expressions. Hier sind einige Beispiele:
#'functionname->(function functionname)#(123)->the vector of the elements 123#c(12)-> a complex number
#xFFFF-> a hex number
#b1111 -> a binary number
und viele mehr. # ist eine so genannte Versand makro Charakter.
Common Lisp könnte verwendet eine andere syntax für Vektoren. Sagen [1 2 3]. Es hätte auch eine andere syntax für komplexe zahlen. So etwas wie {1 2}. Aber es funktioniert nicht. Warum? Der Grund ist, dass Common Lisp versucht, sparsam mit der Zeichen-Verwendung in der Sprache und lässt Figuren wie [, ], { und } dem Benutzer für seine/Ihre eigene syntax-Erweiterungen. Oft Lisp-Anwender entwickeln embedded-Sprachen-und um das ein bisschen einfacher, dem Common Lisp standard zu halten versucht Charakter-Nutzung auf ein minimum und bietet auch den Mechanismus der makro-Zeichen-und dispatch-macro-Zeichen.
Halten Zeichen verwenden nach unten, eine einzelne Versendung Charakter # verwendet wird und das nächste Zeichen bestimmt dann, was kann gekennzeichnet werden. #b für binäre zahlen. #x für hex-zahlen. #c für komplexe zahlen. #( für Vektoren. #' für Funktionsnamen. Plus viele mehr.
Seit Common Lisp ist eine programmierbare Programmiersprache, das Charakter-level-syntax kann durch den Benutzer geändert werden. Siehe die Funktion SET-DISPATCH-MACRO-ZEICHEN.
Sie haben einen exzellenten Artikel! Ich fand es nur, wenn ich Sie brauchte!
#'functionname in Common Lisp
Common Lisp und einige andere Lisp-Dialekte haben mehr als einen namespace. Hier die Funktionen und Werte sind die anders. Um die Funktion Wert ein name ist, wir müssen schreiben:
Da, dass ist ein bisschen lang zu schreiben, es ist eine kürzere Schreibweise:
Um den Effekt zu sehen:
Oben definiert lokale variable
FOO
und ein lokale FunktionFOO
.Die list-Anweisung gibt die Wert von
FOO
, dann die Funktion Wert vonfoo
mit der(function ...)
notation, dann das gleiche mit der short-hand notation und dann den Wert der eigentlich Aufruf der FunktionFOO
.(function foo)
und#'foo
sind das gleiche Konzept, aber unterschiedlich geschrieben. Beide beziehen sich auf die lokale lexikalische Funktion namensFOO
.FOO
eingeführt wird, durch dieFLET
form als lokale Funktion.Dem Lisp-REPL gibt so etwas wie dieses:
Oben zeigt, dass der erste Artikel ist wirklich der Wert der Variablen
FOO
und die nächsten zwei Elemente sind die Funktion Werte, die Funktion gebundenFOO
. Das Letzte Element ist das symbolBAR
, wie von der Funktion zurückgegeben rufen(FOO)
.Diese Trennung der Namensräume für normale Werte und die Funktion der Werte ist in Common Lisp, Emacs Lisp und ISLisp. Andere Lisp-Dialekte wie Scheme nicht über diese Trennung. Im Schema kann ein name nur Bezeichnung eines Wertes.
Das Zeichen"#".
Den
#
Zeichen wird verwendet, um einzuführen, die spezielle syntax von s-expressions. Hier sind einige Beispiele:und viele mehr.
#
ist eine so genannte Versand makro Charakter.Den ANSI Common Lisp HyperSpec beschreibt die
#
Charakter in Abschnitt 2.4.8 Sharpsign.Common Lisp könnte verwendet eine andere syntax für Vektoren. Sagen
[1 2 3]
. Es hätte auch eine andere syntax für komplexe zahlen. So etwas wie{1 2}
. Aber es funktioniert nicht. Warum? Der Grund ist, dass Common Lisp versucht, sparsam mit der Zeichen-Verwendung in der Sprache und lässt Figuren wie[
,]
,{
und}
dem Benutzer für seine/Ihre eigene syntax-Erweiterungen. Oft Lisp-Anwender entwickeln embedded-Sprachen-und um das ein bisschen einfacher, dem Common Lisp standard zu halten versucht Charakter-Nutzung auf ein minimum und bietet auch den Mechanismus der makro-Zeichen-und dispatch-macro-Zeichen.Halten Zeichen verwenden nach unten, eine einzelne Versendung Charakter
#
verwendet wird und das nächste Zeichen bestimmt dann, was kann gekennzeichnet werden.#b
für binäre zahlen.#x
für hex-zahlen.#c
für komplexe zahlen.#(
für Vektoren.#'
für Funktionsnamen. Plus viele mehr.Seit Common Lisp ist eine programmierbare Programmiersprache, das Charakter-level-syntax kann durch den Benutzer geändert werden. Siehe die Funktion SET-DISPATCH-MACRO-ZEICHEN.