Elijah brought up the possibility of decorating verbs
Associative adverb would be a declaration that 1 u 2 u 3 is the same result as
(1 u 2) u 3. and then u Associative/ might be parallel optimized in its
implementation, in addition to documenting the programmer's assumptions.
for (A n)
A Sorted adverb in this case would decorate the data that is asserted to be
sorted by the declaration and (Sorted (sort n)) would ensure it. (i.~ Sorted)
would allow choosing an implementation of i.~ that assumes data is sorted,
which I presume can be faster. (i.~ Unique Sorted) would invoke multiple
assumptions of the data, that can also be "bound" to the data instead if (A n)
or (A A n) -: ((AA)n) exist as trains.
On Tuesday, January 10, 2023 at 01:20:59 p.m. EST, Raul Miller
<[email protected]> wrote:
What would this Associative adverb do?
Also, can this approach be made to usefully invoke (+/!.0) ?
Thanks,
--
Raul
On Tue, Jan 10, 2023 at 1:12 PM 'Pascal Jasmin' via Programming
<[email protected]> wrote:
>
> There is after all a Conjunction approach that permits ambivalent u verb,
>and so for attributes that current native J code could leverage, it would be
>possible to have full functionality of (A n) suggestion.
> Dn =: 2 : 'v u ]' NB. dyadic with x as n or monadic with [: as v
> +/"1 0 (Dn 2 3) i.5 NB. or natural xy order: 2 3 (+/"1 0 Dn ) i.5
> 2 3
>
> 3 4
>
> 4 5
>
> 5 6
>
> 6 7
>
> +/"0 1 Dn 2 3 ] i.5
> 2 3 4 5 6
>
> 3 4 5 6 7
>
>
>
>
> +/"0 1 Dn [: i.5
>
> 10
>
> this would let you/us decorate a verb as: (where Associative is an adverb)
> (Dn Associative)((Dn Associative) [:) NB. Monad only u Or ((Dn
> [:)Associative) or just Associative((u Dn) Associative) NB. ambivalent fixed
> u, but monad needs [: in x position.
> Decorating a noun requires a conjunction, but is still possible: (where
> Sorted is a conjunction)
> (Sorted data) NB. adverb instead noun that was data.
> where Sorted that does nothing (to modify/choose implementation of u) can be:
> Sorted =: APPLY =: 2 : ' u n'
>
> u Sorted data -: u (Sorted data) NB. for monad u
>
> + Sorted 3
>
> 3
>
> (u Dn) (Sorted Data) NB. dyad u
>
> 2 (+ Dn) (Sorted 3)
>
> 5
>
>
> 2 (i.~ Dn) (Sorted (i.5))
> 2
>
> 2 (i.~ Dn) Sorted (i.5)
>
> 2
>
>
> findfirstsorted =: (i.~ Dn) Sorted ]: NB. ACA
>
>
> 2 findfirstsorted (i.5) NB. presumed sorted without "data attribute"
>
> 2
>
> findfirstAttributeSorted =: (i.~ Dn) NB. real function might optimize
> implementation of i. but delegation requires lookahead not part of
> interpreter.
>
>
> 3 findfirstAttributeSorted (Sorted (i.5))
>
> 3
>
> The case for (A n) is that it would designate a special decorated noun that
> because it is special can be peeked inside of (the adverb) to determine the
> decoration, and then when a verb is applied, the proper verb implementation
> suited to the decoration can be chosen. It is also a bit more flexible to
> implement decorations either as (u A) or (A n) for any A.
> on a different note, reusing D. and D: could be
> D. =: 2 : 'v u ]' NB. Dn above, but v is any ambivalent verb or [: . u~ D. v
> is dyadic compose with y as 2nd x: ie. becomes ] u v. Also monadic hook.D:=:
> 2 : '[ u v' NB. dyadic compose with repeated x, or monadic hook
>
> On Tuesday, January 10, 2023 at 10:35:16 a.m. EST, 'Pascal Jasmin' via
>Programming <[email protected]> wrote:
>
> > S.
> I was going to suggest some foreign equivalent to S. But this approach is
> sufficient. A: (for (A)ssociative declaration) would be another candidate.
> if A: (or a foreign adverb) were used for this. u S. could be a
> declaration/hint that the y argument to u is in sorted order.
> plus =: + A: NB. or + S.
> becomes a "decorated verb" without creating an "attribute system" that would
> be completely new to J.
> One way to add attributes to data would be a new train:
> A n : adverb where: u (A n) -> (uA n) : (x uA n)
> Though this can already be done with a conjunction, so the case for a new
> train seems dubious. Except that both a conjunction and this new adverb
> train "eat y" argument to produce a noun, which is somewhat unusual, and then
> that "specialness" can perhaps justify a new train. Another issue with
> conjunction approach is that if u is forced monadic only, then x&u loses the
> ability to apply dyadic rank to u. If u is forced to be dyadic only, then a
> conjunction must be a "triple modifier" (return an adverb), where say [:
> would apply uCn, and a noun would apply m uC n (where m is final 3rd
> parameter).
> (A n) would decorate nouns intuitively such that data =: (A data) when used
> as y argument allows "transparent use" where
> u (A n) -: (uA) y x (uA) y -: x u (A n)
>
> even when (A n) is decorating/attributing a noun, it is saying "apply all
> verbs to this noun as uA" where A would typically be a giant switch/case.
> statement that chooses among implementations of u. Even if Associative
> "decorator" applies to verbs rather than data, Unique, Sorted would typically
> attribute data. But "user" decorations like Dictionary, RaggedArray would
> define the structure of a noun such that built in J operators can be
> overriden to "understand the data structure". DataIsChunkable can be an
> adverb that splits the data into chunks and applies u in threads on each
> chunk, then optionally unpixes them, though that is more likely to be a verb
> annotation than data annotation.
> One complication, or possibly elegance, of (A n) is how to handle:
> (A n) A
> where u (A n) -> (uA n) : (x uA n), is treating n as a y argument to uA
> (A1 n) A2 would be an adverb train that defers computation until u is
> provided instead of treating (A1 n) as the m argument to A2. example:
> newdata =: [x] u ((Sorted data) ApplySortedIfSorted)
> would make newdata either a simple noun or (Sorted newdata) "decorated
> noun". ApplySortedIfSorted becomes an adverb applied after u (Sorted data) is
> applied and produces a noun result. You can even define the noun data
> interchangeably with the adverb:
> ((data Sorted) ApplySortedIfSorted)
> and use it interchangeably with verbs that would treat data as their y
> argument.
>
> On Tuesday, January 10, 2023 at 12:10:17 a.m. EST, Elijah Stone
><[email protected]> wrote:
>
> My preference is to allow the user to specify what transformations they would
> like to permit the implementation to perform in what contexts, as recommended
> by ieee 754 (sec 10.4). Perhaps an adverb S., such that [x] u S. y applies u
> with strict fp semantics. Or perhaps a function attribute, specified in
> similar manner to associativity (howsoever that is specified).
>
> On Mon, 9 Jan 2023, Marshall Lochbaum wrote:
>
> > Well, true, I'm not in favor of rearranging +/ either. The dangers of
> > floating point don't include nondeterminism, unless you make them.
> >
> > However, I also think matrix products have it worse. Numbers with widely
> > varying exponents are a bit of an edge case. But when you're multiplying
> > a few large matrices together they can show up naturally, so I expect
> > it's not so rare to have a product that's numerically stable in one
> > direction and not in the other.
> >
> > Marshall
> >
> > On Mon, Jan 09, 2023 at 05:52:34PM -0600, Omar Antolín Camarena wrote:
> >> But that's just normal floating non-associativity. It happens even for
> >> addition of "integers":
> >>
> >> 1 + (_1e19 + 1e19)
> >> 1
> >> (1 + _1e19) + 1e19
> >> 0
> >>
> >> People using floating point are probably aware of the dangers or at least
> >> should be.
> >>
> >> --
> >> Omar
> >> ----------------------------------------------------------------------
> >> For information about J forums see http://www.jsoftware.com/forums.htm
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm