Newbie questions about Pliant

Newbie questions about Pliant

variable keywords (meta)

Can we substitue variables as a pliant command?
Message posted by maybe Bryan on 2002/06/04 23:08:17
I want to make dynamic control statements. I was reading the meta programming
section but I'm not sure on how to proceed to accomplish this.
Consider the statement:
if a < b

What if I don't know before hand what the operator should be? Can I write
something like (consider the following as psuedo-code):

select "operator" (var Str op)
  option ">" ">"
  option "<" "<"
  option "=" "="
if a op b

Or if we wanted to get a little wild:
control a op b
Message posted by maybe Marcus on 2002/06/05 17:01:28
Hello Bryan.

I am also interested in learning how to do things similar to that.

I think the best start is to study 
1- Pliant's compiling mechanism
2- Pliant's parser mechanism (doc under construction)
3- Meta programming (doc not reviewed yet)
Message posted by maybe Hubert Tonneau on 2002/06/05 20:05:18
You should have a look at 'runtime_compile' instruction.

A fiew points about your idea:
. you need to aquire 'pliant_compiler_semaphore' semaphore before
  calling 'runtime_compile'
. it should be very slow

Basically, an interpreter would be much more efficient for doing such things.

Here is an untested sample implementation (proably not working):

module "/pliant/language/compiler.pli"
gvar CBool cond ; gvar Sem sem
select "operator" (var Str op)
  option ">" ">"
  option "<" "<"
  option "=" "="
button "go"
  pliant_compiler_semaphore request
  runtime_compile op (cast op Ident)
    cond := op a b
  if cond
  pliant_compiler_semaphore release

Another remark: I've written (op a b) and not (a op b) because '>' is
recognized and handled as an operator at parsing time, so since 'op' is
not recognized as an operator, you have to do the folding by hand.