Scheme: Nutzung eigener Macros/Funktionen in Macros
-
Hallo,
ich habe folgenden Code (der bereits funktioniert, wenn er auch etwas sinnlos ist):
(define-macro global (lambda (name) (let ((string-name (symbol->string name))) `(begin (define ,(string->symbol (string-append "init-" string-name)) (lambda (,name) (lambda (value) (if (equal? value #f) ,name (set! ,name value))))) (define ,(string->symbol (string-append "global-" string-name)) (,(string->symbol (string-append "init-" string-name)) #f)) (define ,(string->symbol (string-append "write-" string-name)) (lambda (value) (,(string->symbol (string-append "global-" string-name)) value))) (define ,(string->symbol (string-append "read-" string-name)) (lambda () (,(string->symbol (string-append "global-" string-name)) #f)) )))))
Und wollte nun alle "(string->symbol (string-append "***" string-name))"
Gegen ein entsprechendes Macro/Funktion ersetzten, um mir Schreibarbeit
zu ersparen. Anscheinend kann man aber in Scheme, anders als ich es von
CommonLisp kannte, innerhalb des Macros keine eigenen Funktionen oder
Macros aufrufen. Bsp:... (define ,(string->symbol (string-append "read-" string-name)) (lambda () (,(create-symbol "global-" string-name) #f)) ))))) => reference to undefined identifier: create-symbol
Ich kann den Code höchstens zu etwas expandieren lassen
das eigene Macros/Funktionen enthält. Dies geht in diesem Fall nicht
weil ich sonst mit den defines in Konflikt komme.Lange Rede, kurze Frage: Wie bastle ich in obigen Code, diese Funktion oder
das entsprechende Macro ein?(define create-symbol (lambda (string symbol) (string->symbol (string-append string (symbol->string 'symbol))))) (define-macro create-symbol (lambda (string symbol) `(string->symbol (string-append ,string (symbol->string ',symbol)))))
Ich vermute bereits mal das soetwas einfach nicht geht...
Danke
-
Wenn Macros nicht laufen wollen, dann mache es eben mit Funktionen direkt aus dem Programm!