[chuck-users] Guile C++ wrap

Hans Aberg haberg-1 at telia.com
Mon Mar 22 09:30:00 EDT 2010


On 22 Mar 2010, at 14:01, Kassen wrote:

> Isn't Guile a Scheme dialect/implementation?

Yes, it is a C-library version. It turns out that it has the lambda  
symbol available in a header <eval.h>. So it is possible to use it to  
build lambda expressions form scratch, which is otherwise not possible  
in Scheme.

There are some problems here: a compiled lambda expression becomes  
proceudre, which cannot be treated as an expression anymore. For  
example if I define
   expression e1 = y >> x + y;
and compiles it into a procedure f, then if I write
   expression e2 = x >> f;
and then compile it into g, the symbol "x" in f will be unbound and  
always produce an unbound variable error.

> I'm starting to really like some of Scheme's tricks.

So it is good for playing around with too see what might be required,  
but is not suitable as a library.

> I thought about writing some utility functions for ChucK inspired by  
> it, like the anonymous -in line- "if". I really like that one. Sadly  
> that won't currently fly in any sensible way due to the type-system,  
> while we could actually make sure during parsing/compilation that  
> this particular "if" will return values of the appropriate type and  
> wouldn't need to wait for runtime muck-ups.
>
> Mind you, I'm not sure this sort of stunt would be a good idea at  
> all, but I could see how it would at least be possible.

Yes, that is not only possible but important to have. I have started  
to work with the "case" function; its symbol is also in the <eval.h>  
header:

If one uses a Haskell style definition with conditions
   function1<integer, integer> f;
   f(x) | x < 0  = -1;
   f(x) | x == 0 = 0;
   f(x) | x > 0  = 1;
then that is in Haskell translated into
   f = x >>= case x of
     (x < 0)  -> -1
     (x == 0) -> 0
     (x > 0)  -> 1

In other words, by making those conditional formulas available as  
objects, one can reduce such function definitions to just the lambda.

> We should be careful about chucking out the baby because we want to  
> add new bathwater.

So that is not necessary.

   Hans




More information about the chuck-users mailing list