Was ist mit einem einzelnen Namespace, der zu unhygienischen Makros führt? (in LISP)

8

Einige behaupten, dass ein einzelner Namespace in LISP zu unhygienischen Makros führt. Ссылка

Ссылка

Was genau ist es, einzelne, doppelte oder mehrere Namespaces zu haben, die zur Makrohygiene führen?

    
hawkeye 15.08.2010, 12:49
quelle

1 Antwort

7

Lisp-2 bedeutet, dass Sie zwei Namespaces haben: einen für Funktionen, einen für die anderen Sachen.

Dies bedeutet, dass Sie einen Funktionswert (oder var-Wert) in einem Makro unwissentlich weniger binden.

Da es in Lisp-1 einen Namensraum gibt, sind Sie (statistisch, aber nicht praktisch) doppelt so wahrscheinlich, eine vorhandene Definition zu treffen.

In der Realität haben Lisp-1s Hygiene, die mit Dingen wie gensym und Schemes verwirrender Breite von syntax-structure -ähnlichen Makros bedeckt ist, die Dinge hygienisch halten.

Soweit ich es beurteilen kann, handelt es sich meistens um ein Strohhalm-Argument: Es ist nur ein Problem in den ärmeren oder älteren Implementierungen.

Clojure bietet hygienische Makros durch gensym oder das Lesermakro myvar# (das # ist im Wesentlichen gensym ).

Und Sie müssen sich keine Sorgen über den lokalen Umfang machen, der Ihre Funktion in Ihren Makros wieder herstellt: Clojure ist alles sauber:

%Vor%

Und hier ist eine variable Hygiene:

%Vor%

Beachten Sie unsere sexy gensym 'd x# .

    
Isaac 15.08.2010, 23:05
quelle

Tags und Links