Jeder weiß, was #+
und #-
operators in .sbclrc
bedeutet? Ich konnte es im Handbuch nicht finden.
Ich sehe #-
in .sbclrc
, nachdem ich quicklisp installiert habe:
Ich sehe auch #+
im SBCL-Benutzerhandbuch, aber ich konnte keine Erklärung für ihre Funktionalität finden. Sieht aus wie etwas für das Laden einzelner Module.
Sind sie nur für die SBCL-Implementierung oder Teil von Common Lisp?
Das ist eine allgemeine Einrichtung von Common Lisp, nicht nur SBCL.
Es gibt eine Variable cl:*features*
, die Symbole für 'Features' auflistet, die momentan im Lisp-System vorhanden sein sollten. Typische Merkmale sind: Endian, Implementierung, Subsysteme, Prozessor, Erweiterungen, Lisp Dialekt und mehr.
In einer Lisp-Datei bedeutet der Ausdruck #+quicklisp(foo)
: (foo)
nur lesen und ausführen, wenn das Feature quicklisp
in der Liste der Features *features*
vorhanden ist.
In einer Lisp-Datei bedeutet der Ausdruck #-quicklisp(foo)
: (foo)
nur lesen und ausführen, wenn das Feature quicklisp
NICHT in der Liste der Features *features*
vorhanden ist.
Diese Funktion wird häufig verwendet, um implementierungsspezifischen Code für eine andere Common-Lisp-Implementierung auszublenden oder anzuzeigen.
Siehe Dokumentation:
Sie sind Teil der Common Lisp READ
er. Die Idee ist, dass sie Text "ausblenden", es sei denn, ein bestimmtes Feature (oft eine bestimmte CL-Implementierung) ist ( #+
) oder nicht ( #-
) verfügbar.
Dies sind wahrscheinlich die CL-Konzepte, die am meisten der C / C ++ - Idee von "textuellen Makros" ähneln - konzeptionell und pragmatisch sind sie ähnlich wie
%Vor% ... und dergleichen. Sie verstecken im wahrsten Sinne des Wortes eingehende Quellcodes aus dem READ
er, so dass sie nie lexed - geparst - interpretiert - kompiliert - evaluiert - interniert - nada sind. Sie hören einfach auf zu existieren, wenn die CL-Implementierung, die Sie ausführen, keine Funktion hat / ist die "falsche" Implementierung / was auch immer Flag.
Tags und Links lisp common-lisp sbcl reader-macro