I'd make A: a conjunction that, depending on u, returns a verb or an adverb:
If u is a verb, assume v are a set of properties to set, either binary (a
verb is commutative or not), or multi-valued with a defined default value.
If u is a noun, then treat it as a set of property "keys" (fretted, as for
s:, property names that can be identified by the shortest unique prefix,
preferably being a single character), and v as the corresponding boxed
values (or unboxed if only one or multiple compatible values) for
non-binary attributes, like identity. If a box is empty, it's treated as
for the case above, if u is shorter than the number of attributes in v,
it's overtaken, i.e. padded with empty boxes, triggering the behaviour
above for the corresponding attributes.

E.g. you'd say u A: 'a' or u 'a' A: <1 or u A: 'assoc'

As an added bonus, this way, a user could create cover names for the
resulting adverb for certain combinations of attributes as they fancy, like
Hauke's ASSOC =: A: 'a' or ASSOC =: 'a' A: <1 (used as u ASSOC).

This would limit the need for boxed values to only when non-default or
non-binary properties are set, and is also compatible with setting gerunds
for some (future) use. A possible use case for gerunds could be setting an
explicit derivative for a user-defined function using property 'diff' (as
was previously possible, but this disappeared together with D. ). This
attribute could then be consulted by the math/calculus addon. Perhaps
others would find different use cases for passing around things with verbs
as well...

Best regards,
Jan-Pieter

Op wo 11 jan. 2023 om 03:48 schreef Elijah Stone <elro...@elronnd.net>:

> I originally wanted just one adverb to indicate associativity.  But then
> other
> things just started piling up.  As yet, we have:
>
> - associativity
>
> - commutativity
>
> - identity
>
> - fixedpoint
>
> Commutativity enables a bit more flexibility wrt parallelism, and might
> have
> other uses (forget); identity plugs a long-standing hole, which is that
> +/''
> is 0, but user-defined u/'' is an error, and it also slightly simplifies
> some
> parallel pipelines; fixedpoint enables early-out in u/; all of these are
> useful and desirable.  There could be more yet.
>
> I don't love naming them with strings, but I don't think names like ASSOC.
> are
> better.  I would like to have one-character abbreviations for all or most,
> which is hopefully more palatable.
>
> For unset, I imagine saying u A: 'associative' is sugar for u A:
> ('associative';1); hence, you could say u A:('associative';1)
> A:('associative';0).  That doesn't work for identity/fixedpoint; I guess
> you
> could add a layer of boxing, but that seems annoying.  I don't think it's
> very
> important, but could surely be worked out.  (I almost hesitate to say
> it--perhaps use _. to unset a noun attribute?)
>
> I don't think there's a strong need to allow users to set flags on nouns.
> It's rather a dangerous thing to do, and you could instead just run the
> nouns
> through /:~ or ~. (in the case of sorted/unique); the thing about
> functions is
> that rice's theorem is always waiting around the corner to screw you over
> the
> moment you try to do anything useful.
>
> On Wed, 11 Jan 2023, Hauke Rehr wrote:
>
> > Very interesting indeed, all of this thread.
> >
> > I think annotation both of nouns and verbs would be useful.
> > Do we also need a way of de-annotation?
> > Probably not but I haven’t thought it through.
> >
> > I don’t like the literal approach. I’d rather have J know about
> > constants ASSOC. and SORTED. and the like to be used for that
> > purpose (better response to misspellings and imo cleaner approach).
> >
> > What grammar should the query and set (and maybe unset) primitives have?
> > Hard to tell which approach would work out better.
> >
> > But I would favor such primitives – building corresponding
> > conjunctions should be fairly easy and might even be done
> > for all currently known decorations in a script distributed
> > but not loaded by default.
> > But maybe I missed a point why that new train actually
> > improves the situation here.
> >
> > Hauke
> >
> >
> > Am 10.01.23 um 19:10 schrieb 'Pascal Jasmin' via Programming:
> >>   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 <programm...@jsoftware.com> 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
> >> <elro...@elronnd.net> 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
> >
> > --
> > ----------------------
> > mail written using NEO
> > neo-layout.org
> > ----------------------------------------------------------------------
> > 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

Reply via email to