Hi Ludovic,

You might want to check out the bi word. eg:

M: rectangle area
    [ width>> ] [ height>> ] bi * ;

There is a really nice tutorial at http://elasticdog.com/

Look under the 'combinators' part for a description of the bi (and other
combinators) word.

Thanks, 

Glenn

V. Glenn Tarcea
gtar...@umich.edu
 
-----Original Message-----
From: Ludovic Kuty [mailto:mail...@kuty.be] 
Sent: Monday, January 12, 2009 9:56 AM
To: factor-talk@lists.sourceforge.net
Subject: [Factor-talk] Accessing multiple slots without using dup and swap

Hello,

I saw that the stack effect of every slot reader slot>> is ( object --  
value ). Thus the object is popped off the stack. If I want to get the  
value of another slot, I do not have the object to query it. So I have  
to dup it first.

How can I do this the idiomatic way ?

Suppose that I have a rectangle class defined as  (code kept to a bare  
minimum for the sake of clarity):

TUPLE: rectangle { width float }  { height float } ;

Now I define a method to calculate the area of a rectangle. Note the  
use of dup and swap to access both slots. I feel that there should be  
a better way to access them.

M: rectangle area
    dup width>> swap height>> * ;

I can use it like this:

<rectangle>
    100 >>width
    50 >>height
area .

I thought of doing like this:
SYMBOL: temp
M: rectangle area
    temp [ temp get width>> temp get height>> * ] with-variable ;

But now I have an implementation detail (the fact that temp is a  
symbol) that is leaking out of the method body. It doesn't feel right.  
I should be able to avoid SYMBOL and use "\ temp" but Factor curiously  
complains: "Word not found in current vocabulary search path". The \  
parsing word should avoid trying to execute the word. Any idea are  
welcome.

Thank in advance,

Ludovic Kuty


----------------------------------------------------------------------------
--
Check out the new SourceForge.net Marketplace.
It is the best place to buy or sell services for
just about anything Open Source.
http://p.sf.net/sfu/Xq1LFB
_______________________________________________
Factor-talk mailing list
Factor-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/factor-talk




------------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It is the best place to buy or sell services for
just about anything Open Source.
http://p.sf.net/sfu/Xq1LFB
_______________________________________________
Factor-talk mailing list
Factor-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/factor-talk

Reply via email to