[REBOL] Embedded macros - the goal
From: reffy:ulrich at: 9-Sep-2002 21:33
To those who have had some comments on embedded macros of the Dick persuasion, I should
elaborate what I am really tyring to do with them, so that our internal latent structures
are hallucinating in the same universe.
I implemented these embedded macros in C and found the task rather straight forward
(chuckle). So I thought it would be a good test to see the robustness of Rebol and to
have this capability. So here is a little more information about what I am really trying
to do with the embedded macros. Would be great to see a good solution.
*(EvaluateExpression)
$(NamespaceLookup)
%(EnvironmentVariable)
@(DatabaseReference)
!(CommandLine)
= *(EvaluateExpression) ===================
Interior content is to be executed in program space (Rebol)
EXAMPLE:
aa: "1"
ab: "0"
a: "*(aa)*(ab)"
b: "*(aa)*(ab)"
op: "*"
print "The answer is: *(*(a)*(op)*(b)) I think"
The answer is: 100 I think
EXAMPLE:
print "The answer is: *(a)*(op)*(b) I think"
The answer is: 10*10 I think
= $(NamespaceLookup) ===================
Interior content is found via a namespace lookup function with interiorcontent as its
argument
EXAMPLE:
print "The application is: $(APNAME)"
The application is: MEI
= %(EnvironmentVariable) ===================
Interior content is environment variable looked up by function with interiorcontent as
its argument
EXAMPLE:
print "Rebol's home directory is: %(REBOL_HOMEDIR)"
Rebol's home directory is: c:\Rebol
= @(DatabaseReference) ===================
Interior content is database reference retrieved by function with interiorcontent as
its argument split on colon delimeter.
EXAMPLE:
i.e. results in a query being executed -> select VV from db.tn where LN = 'ln' and VN
= 'vn'
print "The application home dir is: @(ncd:cfg_rtx:$(APNAME):homedir)"
The application home dir is: MEI/applications
= !(CommandLine) ===================
Interior content is a command line to be executed and piped result replaces macro
EXAMPLE:
bindir: "somepath"
print "myprog says: !(myprog @(ncd:cfg_rtx:$(APNAME):homedir)/*(bindir))"
KESS - Keep et semple stewpid!
So, you can see, I was trying to understand how to do the nested macro parsing so that
I could implement these 5 types of macros.
Dick