On Sat, 2007-08-25 at 17:12 -0700, Erick Tryzelaar wrote:
> This is so cool. Here's very very basic list comprehensions:
> 
> comprehensions.flx:
> syntax comprehensions {
>   satom := lsqb sexpr rsqb =># (List::list _2);
>   satom := lsqb sexpr vbar sname <- sexpr rsqb =># """
>     `( ast_apply
>       ,_sr
>       ( ( ast_apply
>           ,_sr
>           ( ( ast_lookup (( ast_name "List" () ) "map" () ) )
>             ( ast_lambda
>               (
>                 ( () ( ( ast_tuple () ) () ) )
>                 ( ( ( ( PVal ,_4 ( ast_name "int" () ) ) ) none ) )
>                 typ_none
>                 ( ( ast_fun_return ,_sr ,_2 ) )
>                 ) ) ) )
>        ( ast_name "xs" () ) ) )
>   """;
> }

> Now, I just need to figure out how to not hardcode the name of the
> list and the type of the inner function. If I replace the "xs" with
> ,_6, it errors with:

Of course it does, but that's because you're an idiot :)
Why do you want to replace the name? You don't. You want
an arbitrary expression: replace 

        ( ast_name "xs" () )

with

        ,_6

and it works fine:

val ys = [ x * 3 | x <- [1,2,3] ];

works!

Replacing the inner function so the type is polymorphic
is impossible because it isn't. The type of

        x * 3

in the example depends on the type of x, so you must specify
the type of x.

If you know the list on the RHS of the -> symbol is non-empty,
then you can probably do this with a typematch .. something like:

        typematch typeof (list (1,2,3)) with
        | list [?t] => ?t
        endmatch


looks like it should work .. but probably doesn't. A simpler
solution is just

        [ x * 3 | x : int <- [1,2,3] ]

which also works for an empty list.




-- 
John Skaller <skaller at users dot sf dot net>
Felix, successor to C++: http://felix.sf.net

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
Felix-language mailing list
Felix-language@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/felix-language

Reply via email to