2017-06-14 3 views

Antwort

2

Das Schema vermeidet eine undichte Implementierung in die Spezifikation und spricht von "Bezeichnern", anstatt ein internes Symbol an einen Wert zu binden - siehe §2.1 von R7RS. Im Schema ist ein "Bezeichner" nur ein Name.

Ein Bezeichnername wird als eine Variable identifizierend behandelt, es sei denn, er identifiziert ein Makro (Syntax) oder befindet sich in einem Kontext, der behandelt werden muss, um ein Symbol zu identifizieren, wie z. Insbesondere heißt es in §2.1 von R7RS: "Wenn ein Bezeichner als Literal oder in einem Literal erscheint (siehe Abschnitt 4.1.2), wird er zur Bezeichnung eines Symbols verwendet (siehe Abschnitt 6.5)". Sie können testen, ob ein Identifikator ein Symbol mit dem Symbol identifiziert? Verfahren.

Guile Schema ist in der Tat umzusetzen Kennungen durch Internierung Symbole und Sie können abfragen, ob ein Symbol gebunden ist definiert unter Verwendung ?:

(defined? 'num) 

=> #f

(define num 1)(defined? 'num) 

=> #t

Dies ist eine schlaue Implementierung und kein tragbares Schema.

Edit: Beachten Sie, dass definiert? funktioniert nur mit Variablen der obersten Ebene, die mit define definiert sind. Es funktioniert nicht mit Let und Cognates.