> one reason for its rarity is, at least, that in any real-world context, a 
> complete MxN catalog would be prohibitively expensive

its very cheap compared to A. and filtering permutations after you've generated 
them.  In the resource matching application I linked to, where 1 user ends up 
with 1 resource, its also possible to prefilter the arguments to catalogue 
removing options where forced choices exist, and thus significantly reducing an 
exponential algorithm to allow solutions to moderately large problem spaces.

Its fast compared to backtracking loop solutions in other languages even when 
they abort after finding first valid set of matches.  It seems like a very 
clean J way of approaching fairly hard problems.  Polynomial and higher 
problems benefit from strategies that reduce search space.

Using catalogue to analyze n moves with an average x possibilities per move has 
an expensive x ^ n search space.  But reducing any move possibility to 1 
reduces both average x, and reduces n by 1


----- Original Message -----
From: Dan Bron <[email protected]>
To: "[email protected]" <[email protected]>
Cc: 
Sent: Thursday, May 8, 2014 6:39:14 PM
Subject: Re: [Jprogramming] a cool permutation verb

I don't see catalog used frequently in natural J code. It does come up on these 
Forums from time to time, mostly in contrived situations. In my own code, I 
sometimes use it to generate J sentences in order to compare performance 
statistics for semantically-equivalent phrases. But outside of that, I don't 
see it too often. I suspect one reason for its rarity is, at least, that in any 
real-world context, a complete MxN catalog would be prohibitively expensive. 

So it's unsurprising that APL didn't have a primitive catalog function. Of 
course, you could express it as {jot} {dot} {comma}, dot as being outer product 
(and jot in this context a placeholder, not unlike [:) with the usual caveats 
about the differences between J's rank and APL's multidimensionality (ie you 
could expect catalog to work for 1D vectors in APL and generalized lists in J).

So, when he got his chance to "rationalize" APL and rebuild it from
the ground up as J, did Ken have a change of heart about catalog's centrality 
to the discipline of computer science? Is that why he assigned to it that 
scarce and desirable resource, a primitive spelling? A one-character primitive, 
no less?

I suspect not. Recall the other valence of {, to wit: from. You might think 
having this kind of partner is an even greater endorsement of catalog's virtues 
... until you realize:

   row_2n3n6_col_7n13 =: 2 3 6 ; 7 13
   table =: i. 10 20
  
   (< row_2n3n6_col_7n13) { table NB. "from"
47  53
67  73
127 133
  
   ({ row_2n3n6_col_7n13)         NB. "catalog"
+---+----+
|2 7|2 13|
+---+----+
|3 7|3 13|
+---+----+
|6 7|6 13|
+---+----+
  
   ({ row_2n3n6_col_7n13) { table NB. "catalog from"
47  53
67  73
127 133

Ah, "from" *is* "catalog". Catalog is a primitive because from needed a 
thematically related definition for monad { (and from, of course,  got a 
precious one-character primitive because it *is* central to array programming). 
And, incidentally, this is why the results of catalog are boxed, even though 
they don't need to be, and we end up writing >@:{ instead of plain { every time 
we use it. 

That is, by definition, the results of { will be homogenous in both type and 
shape, and so we know for certain boxes aren't required ... except that dyad { 
has a scalar left rank, and so to completely address an atom (or anything more 
granular than an item, ie a Cartesian point in the frame specified as a vector 
of indices, one per axis), each selection must be boxed.

True story.

-Dan



Sent from my iPhone


> On May 8, 2014, at 5:34 PM, "'Pascal Jasmin' via Programming" 
> <[email protected]> wrote:
> 
> Its the same.  Just more descriptive name than catalogue perhaps.  Google 
> seems to only find J references to query "catalogue function permutations".  
> I feel as though catalogue and my use of it is a generalizable pattern, and 
> the J designers agreed, but I don't know if other languages did something 
> similar, and just used a different name?
> 
> Was catalogue in APL?
> 
> 
> ----- Original Message -----
> From: David Lambert <[email protected]>
> To: programming <[email protected]>
> Cc: 
> Sent: Thursday, May 8, 2014 4:50:40 PM
> Subject: Re: [Jprogramming] a cool permutation verb
> 
> Indeed cool, does it differ from ,@{ :[:
>> Date: Thu, 8 May 2014 10:53:53 -0700 (PDT)
>> From: "'Pascal Jasmin' via Programming"<[email protected]>
>> To: Programming forum<[email protected]>
>> Subject: [Jprogramming] a cool permutation verb
>> Message-ID:
>>     <[email protected]>
>> Content-Type: text/plain; charset=utf-8
>> 
>> cperm =: [: , [: < "1 [: > [: ,"0 1/ each/ (_2&}. , [: ,"0 0/ each/ _2&{.)
>> 
>> this creates constrained permutations where each position in the list can 
>> only be drawn from its own set:
>> 
>> ? ?cperm 3 4 ; 1 2
>> ?????????????????
>> ?3 1?3 2?4 1?4 2?
>> ?????????????????
>> 
>> ? ?cperm 0 ; 3 4 ; 1 2; 5
>> ?????????????????????????????????
>> ?0 3 1 5?0 3 2 5?0 4 1 5?0 4 2 5?
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to