Or, alternatively doing the concat first:

: 2cartesian-product ( seq1 seq2 seq3 -- newseq )
    cartesian-product cartesian-product concat
    [ first2 swap '[ _ prefix ] map ] map ;



On Mon, Apr 1, 2013 at 7:06 AM, John Benediktsson <mrj...@gmail.com> wrote:

> Instead of using make, you can do this which looks cleaner:
>
> : 2cartesian-product ( seq1 seq2 seq3 -- newseq )
>     cartesian-product cartesian-product [
>         [ first2 swap '[ _ prefix ] map ] map
>     ] map concat ;
>
>
>
> On Mon, Apr 1, 2013 at 6:59 AM, Loryn Jenkins <lor...@gmail.com> wrote:
>
>> Thanks, Rupert.
>>
>> I followed your suggestion, and managed to get it working. :-)
>>
>> USING: kernel sequences vectors make
>>
>> : 2-cartesian-product ( seq1 seq2 seq3 -- newseq )
>>     cartesian-product cartesian-product concat
>>     [ [ first2 first2 [ >vector ] bi@ [ over ] dip swap prefix [ swap
>> prefix ] dip swap , , ] each
>>     ] V{ } make ;
>>
>> Loryn Jenkins
>>
>>
>> On Mon, Apr 1, 2013 at 11:17 PM, Rupert Swarbrick 
>> <rswarbr...@gmail.com>wrote:
>>
>>> Loryn Jenkins <lor...@gmail.com> writes:
>>> > Hi
>>> >
>>> > I'm attempting to adapt the code for cartesian-product into
>>> > 2cartesian-product, in order to produce the cartesian product of 3
>>> > sequences.
>>>
>>> I'm afraid I haven't got time to properly look at your code, but don't
>>> forget that the cartesian product is associative. That is:
>>>
>>>   (A × B) × C = A × (B × C)
>>>
>>> and either of these two makes sense for the cartesian product of three
>>> sets. In your case, this means that
>>>
>>>   { 1 2 } { 3 4 } { 5 6 } cartesian-product cartesian-product
>>>
>>> will almost do what you want (it's the right hand side of the equation
>>> above). But the nesting won't be quite right, since you'll have elements
>>> that look like { 1 { 3 5 } }, so you can fix that with something like
>>>
>>>   [ first2 first2 ] map
>>>
>>> I think (untested).
>>>
>>> Rupert
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Own the Future-Intel&reg; Level Up Game Demo Contest 2013
>>> Rise to greatness in Intel's independent game demo contest.
>>> Compete for recognition, cash, and the chance to get your game
>>> on Steam. $5K grand prize plus 10 genre and skill prizes.
>>> Submit your demo by 6/6/13. http://p.sf.net/sfu/intel_levelupd2d
>>> _______________________________________________
>>> Factor-talk mailing list
>>> Factor-talk@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/factor-talk
>>>
>>>
>>
>>
>> ------------------------------------------------------------------------------
>> Own the Future-Intel&reg; Level Up Game Demo Contest 2013
>> Rise to greatness in Intel's independent game demo contest.
>> Compete for recognition, cash, and the chance to get your game
>> on Steam. $5K grand prize plus 10 genre and skill prizes.
>> Submit your demo by 6/6/13. http://p.sf.net/sfu/intel_levelupd2d
>> _______________________________________________
>> Factor-talk mailing list
>> Factor-talk@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/factor-talk
>>
>>
>
------------------------------------------------------------------------------
Own the Future-Intel&reg; Level Up Game Demo Contest 2013
Rise to greatness in Intel's independent game demo contest.
Compete for recognition, cash, and the chance to get your game 
on Steam. $5K grand prize plus 10 genre and skill prizes. 
Submit your demo by 6/6/13. http://p.sf.net/sfu/intel_levelupd2d
_______________________________________________
Factor-talk mailing list
Factor-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/factor-talk

Reply via email to