Subject: Re: How to find a procedure given a symbol or string From: Brandon Ibach <bibach@xxxxxxxxxxxxxx> Date: Tue, 27 Jul 1999 19:58:08 -0500 |
Quoting Mitch C. Amiano <amiamc@xxxxxxxxxxxxxxx>: > A question for the old-time DSSSLers out there: is there any way to > produce an existing procedure object when given a string or a symbol? > I want to use an attribute value to determine a function to be called, > and want to avoid lots of "if"s or a "case". > > That is, given tags like > > <jediknight name="obiwan" func="apprentice"> > <jediknight name="maul" func="apprentice"> > <jediknight name="anakin" func="badactor"> > > and a DSSSL functions > > (define (apprentice name) (string-append name " is an apprentice" )) > (define (badactor name) (string-append name " needs more work" )) > > I want to use the value of "func" to call the correct > DSSSL function, something like what would be > expressed as "call-some-function-using-a-string" in > the following snippet: > > (element JEDIKNIGHT > (let ( (func (attribute-string "FUNC") ) > (name (attribute-string "NAME") ) ) > (literal (call-some-function-using-a-string func name) ) ) ) > So far as I have thought this through, I don't believe it is possible. In order to pull it off, you'd need to produce a symbol (easy enough with (string->symbol)), and then retrieve the value (in this case, a procedure) that is bound to it. I've yet to come up with a way to do that last part, short of some sort of (eval) construct, which DSSSL doesn't have, so far as I'm aware. However, here's a compromise: (define defproc apprentice) (define procmap `(("apprentice" ,apprentice) ("badactor" ,badactor))) (define (call-some-function-using-a-string func name) ((car (cdr (or (assoc func procmap) '(#f defproc)))) name)) Having to maintain the "procmap" list might be almost as bad as having to maintain a big (case), however. *shrug* Note that to use this, you may need to include a definition for (assoc). There's one available from the DSSSL Procedure Library at www.mulberrytech.com. -Brandon :) DSSSList info and archive: http://www.mulberrytech.com/dsssl/dssslist
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
How to find a procedure given a sym, Mitch C. Amiano | Thread | Re: How to find a procedure given a, Mitch C. Amiano |
Re: footnotes, Brandon Ibach | Date | RE: processing character entities, DPawson |
Month |