question about sublist



Sorry, in my last message, I meant to say that, after compilation,
they produce runtime errors.

-sen


On Wed, 18 Apr 2007, sen1 at math.msu.edu wrote:

> Following a suggestion from RJF to use the builtin function 'map', I
> rewrote the program 'sublist.mac' which is attached.  It has both
> Jaime's routine, called 'j_sublist' and two other routines, called 'opp_1' 
> and 'same_1'.
>
> The routines opp_1, and same_1 work very fast.
>
> But, they won't compile.  I tried putting the function names 'fex' and
> 'proj_1' into the local variables of the function 'opp_1' The warning 
> disappeared, but it still would not compile.
>
>
> (%i1) load("sublist");
> Evaluation took 0.00 seconds (00.10 elapsed)
> (%o1)                            ./sublist.mac
> (%i2) xx: xrl(10000)$
> Evaluation took 0.60 seconds (0.60 elapsed)
> (%i3) same_1(xx)$
> Evaluation took 0.52 seconds (0.53 elapsed)
> (%i4) compile(same_1);
>
> Warning-> fex is an undefined global variable.
> Warning-> proj_1 is an undefined global variable.
> Compiling gazonk0.lsp.
> End of Pass 1.
> End of Pass 2.
> OPTIMIZE levels: Safety=2, Space=3, Speed=2
> Finished compiling gazonk0.lsp.
> Evaluation took 0.00 seconds (0.20 elapsed)
> (%o4)                              [same_1]
> (%i5) same_1(xx)$
>
> Maxima encountered a Lisp error:
>
> symbol
>
> Automatically continuing.
> To reenable the Lisp debugger set *debugger-hook* to nil.
>
> Any ideas?
>
> TIA,
> -sen
>
> ---------------------------------------------------------------------------
> | Sheldon E. Newhouse            |    e-mail: sen1 at math.msu.edu           |
> | Mathematics Department         |       				   |
> | Michigan State University      | telephone: 517-355-9684                |
> | E. Lansing, MI 48824-1027 USA  |       FAX: 517-432-1562                |
> ---------------------------------------------------------------------------
>
> On Tue, 17 Apr 2007, Stavros Macrakis wrote:
>
>> On 4/17/07, Richard Fateman <fateman at cs.berkeley.edu> wrote:
>>> 
>>> You can do some extra checking, but I think something like this will work:
>>> 
>>> Extract(input):=block([result:[]],
>>> map(lambda([x,y], if x*y>0 then result:cons(x,result)),  input,
>>> rest(input)),
>>> reverse(result));
>>> 
>> 
>> This will always given an error, since "map" requires all its list 
>> arguments
>> to be the same length.
>> Perhaps we should have a Lisp-like version of map which stops when the 
>> first
>> list runs out.
>> 
>> Also, map will construct an unnecessary list (which is then thrown away),
>> but I suppose that is a reasonable trade-off for easier programming.
>>
>>           -s
>