> (2097152 = 3!:0) is undocumented magic that detects a verb (phrase). Is
there any similar magic number that > would detect a string/ar
representation of modifiers?
Yes, I normally mask the standard library verb datatype (datatype_z_) with
this alternative version,
datatype=. (<;._1
'|boolean|literal|integer|floating|complex|boxed|extended|rational|sparse
boolean |sparse literal|sparse integer|sparse floating|sparse
complex|sparse boxed |symbol
|unicode|unicode4|?|?|verb|adverb|conjunction') >@{~ 1 2 4 8 16 32 64 128
1024 2048 4096 8192 16384 32768 65536 131072 262144 524288 1048576 2097152
4194304 8388608 i. 3!:0
Wrap=. -@:[ ]\ 5!:5@<@:]
66 Wrap 'datatype'
(<;._1 '|boolean|literal|integer|floating|complex|boxed|extended|r
ational|sparse boolean |sparse literal|sparse integer|sparse float
ing|sparse complex|sparse boxed |symbol |unicode|unicode4|?|?|verb
|adverb|conjunction') >@{~ 1 2 4 8 16 32 64 128 1024 2048 4096 819
2 16384 32768 65536 131072 262144 524288 1048576 2097152 4194304 8
388608 i. 3!:0
(changing what needs to be changed for early interpreters). ;)
So,
datatype 0j1
complex
datatype 'I am a literal...'
literal
I_am_an_unassigned_verb
|value error: I_am_an_unassigned_verb
|[-3]
I_am_an_unassigned_verb datatype adv
verb
datatype datatype adv
verb
datatype o train <'/'
adverb
datatype o train <'adv'
adverb
datatype o train <'&'
conjunction
datatype o train <'bind'
conjunction
> works, but '' tie + will just return a fork.
> '' $ ... portion of the fork in ART does not have an obvious purpose.
> ART2=. (an`('' tie~ ]))@.(2097152 = 3!:0) adv NB. seems to work in
examples.
>
> regarding your comments about (`'') not a real gerund,
Both remarks are related; first, allow me to clarify that (`'') produces
"real" gerunds. My actual comment was "the gerundial representation
produced by (`'') technically is not an ar [atomic representation]." An
atomic representation, as its name implies, is an atom (i.e., it has rank
0); in contrast, for a verb argument, (`'') produces a gerund having rank 1
which is not an atom. That is the reason why both,
(toJ f.)AR D
((10{a.) I.@(e.&(13{a.))@]} ])@:(#~ -.@((13 10{a.)&E.@,))
and
(toJ f.)ART D
((10{a.) I.@(e.&(13{a.))@]} ])@:(#~ -.@((13 10{a.)&E.@,))
work (i.e., produce atomic representations confirmed by D); but, both
(toJ f.)(`'') D
|rank error: D
| (toJ f.)(`'') D
and
(toJ f.)ART2 D
|rank error: D
| (toJ f.)ART2 D
fail and report a rank error.
On Mon, Aug 20, 2018 at 8:52 PM, 'Pascal Jasmin' via Programming <
[email protected]> wrote:
> awesome Pepe,
> just some additional explanations if it helps others, (and some questions)
> tie is a verb version of ` . In:
> ART=. (an`('' $ '' tie~ ]))@.(2097152 = 3!:0) adv
>
> the left side of @. must be verbs.
> (2097152 = 3!:0) is undocumented magic that detects a verb (phrase). Is
> there any similar magic number that would detect a string/ar representation
> of modifiers?
>
>
> - tie&'' adv
>
> ┌─┐
>
> │-│
>
> └─┘
>
> works, but '' tie + will just return a fork.
> '' $ ... portion of the fork in ART does not have an obvious purpose.
> ART2=. (an`('' tie~ ]))@.(2097152 = 3!:0) adv NB. seems to work in
> examples.
>
>
> regarding your comments about (`'') not a real gerund,
>
> ({. +@- (`'')) 5!:0 NB. adds a shape.
> +@-
> +@- (`'') {. adv D NB. alternate of above
>
>
> ( +@- (`'')) `:6 NB `:6 not fooled
>
> +@-
>
>
> On Monday, August 20, 2018, 7:40:39 p.m. EDT, Jose Mario Quintana <
> [email protected]> wrote:
>
> In the related thread "[Jprogramming] Applying an adverb to a list/gerund
> of verbs" (see the trailing post) Pascal wrote:
>
> > Thank you Jose,
>
> You are welcome Pascal (feel free to call me Pepe which is Jose's
> nickname).
>
>
> > Would you by any chance have figured out a way to make AR tacit?
> > *: AR is so much easier to "call"/type than ar '*:'
> > (`'') almost works, though "fails" with nouns, but is useful for an
> argument that can be verb or gerund.
>
> I had not produced a tacit version of AR because, personally, I did not
> have the need despite the fact that I use the atomic representation (ar) of
> words (nouns, verbs, adverbs, and conjunctions) directly from time to
> time. (Why I do not need a tacit AR? More on that later). I will mention
> some things, which I am sure you know, for the potential benefit of other
> members of the forum. As usual, one could always go the hard orthodox way
> (in principle, at least). However, I like the easy wicked way because I am
> naturally lazy.
>
> First a word of caution, the wicked way relies on an apparent internal
> design architecture feature of the J interpreters ( which treats J words
> the same in a fairly general sense) to perform illegal operations; this
> makes possible to produce any kind of adverb in a tacit form, including
> verb producing adverbs that refer (tacitly, of course) to the arguments of
> the verbs produced.
>
> I have followed the wicked way for several years using different versions
> of J interpreters; but, as Martin Nietzel put it recently "We are in twisty
> little maze of J versions, all alike." I have noticed a slight erosion of
> the aforementioned feature in the J805 and j06 interpreters. A more
> significant deterioration happened from J807 beta-e to beta-g. The J804,
> J805, J805 and J807 beta-e interpreters just bend and comply while running
> the J Wicked Toolkit script [0]; in contrast, the J807 beta-g interpreter
> snaps. Likely, the wicked way will be somewhat compromised in future
> official stable versions of the interpreter. Perhaps, the wicked way will
> be banned altogether and no black magic will be allowed. (It is black
> magic in J but it is white magic in many other programming languages that
> embrace higher-order functions).
>
> The above notwithstanding, what follows runs fine even on the J807 beta-g
> interpreter.
>
> Henceforth I am assuming that the sentences of the post below, up to the
> production of AR, have been run: that is,
>
> (9!:3) 5 2 NB. Box and linear representations...
> .
> .
> .
> AR=: 1 : '5!:1 <''u'''
>
> We can begin with the simple case when the argument of AR is noun,
>
> D=. 5!:0 NB. DoJ: Define. 5!:0 is an adverb and provides a complete inverse
> of 5!:1. ( T=. i.2 3 ) 0 1 2 3 4 5 ar'T' ┌─────────┐ │┌─┬─────┐│ ││0│0 1
> 2││ ││ │3 4 5││ │└─┴─────┘│ └─────────┘ (ar'T') D 0 1 2 3 4 5
>
> A tacit version of AR is,
>
> ART=. an f.adv T ART ┌─────────┐ │┌─┬─────┐│ ││0│0 1 2││ ││ │3 4 5││
> │└─┴─────┘│ └─────────┘ (i.2 3) ART ┌─────────┐ │┌─┬─────┐│ ││0│0 1 2││ ││
> │3 4 5││ │└─┴─────┘│ └─────────┘ (i.2 3) ART D 0 1 2 3 4 5
>
> Of course, if the argument of ART is a verb then we will need something
> more elaborated... Actually, that is not necessarily the case! For
> instance,
>
> +/@:*: ART
>
> ┌──────────┐
>
> │┌─┬──────┐│
>
> ││0│+/@:*:││
>
> │└─┴──────┘│
>
> └──────────┘
>
>
> is an illegal noun; yet, as far as the interpreter is concerned, it is an
> ar of +/@:*:
>
>
> +/@:*: ART D
> +/@:*:
> ┌─────┬──┬──┐
> │┌─┬─┐│@:│*:│
> ││+│/││ │ │
> │└─┴─┘│ │ │
> └─────┴──┴──┘
>
> and it can be used, as a whole, in place of the actual ar (not tested it
> much with the beta interpreters); for example,
>
>
> (+/@:*: ART`:6) 1 2 3 14
>
> There are instances where one might require the real thing for internal
> inspection and modification of a verb structure (for example, to replace
> the all its components of the form [: u v by (u@:v)).
>
>
> In that case, the following version should work,
>
> tie=. (<'`') (0:`)(,^:)
>
> ART=. (an`('' $ '' tie~ ]))@.(2097152 = 3!:0) adv
>
> (use 262144 instead of 2097152 for earlier versions of the interpreter if
> necessary); for example,
>
> (i.2 3) ART
> ┌─────────┐
> │┌─┬─────┐│
> ││0│0 1 2││
> ││ │3 4 5││
> │└─┴─────┘│
> └─────────┘
>
> u@:v AR
> ┌──────────┐
> │┌──┬─────┐│
> ││@:│┌─┬─┐││
> ││ ││u│v│││
> ││ │└─┴─┘││
> │└──┴─────┘│
> └──────────┘
>
> u@:v ART D
> u@:v
> ┌─┬──┬─┐
> │u│@:│v│
> └─┴──┴─┘
>
> (toCRLF f.ART) -: (toCRLF f.AR)
> 1
>
> By the way, the gerundial representation produced by (`'') technically is
> not an ar; for example,
>
> u@:v (`'') D
> |rank error: D
> | u@:v(`'') D
>
> PS. I had not produced ART before because I have access to a custom
> foreign which allows to use verbs that require named words (e.g. (4!:0),
> (5!:1), (5!:2), etc.) namelessly.
>
> Reference
>
> [0] J Wicked Toolkit
> http://www.2bestsystems.com/foundation/j/Jx.zip
> \Jx\J\J Wicked Toolkit.ijs
>
>
>
>
>
> On Thu, Aug 16, 2018 at 11:21 PM, 'Pascal Jasmin' via Programming <
> [email protected]> wrote:
>
> > Thank you Jose,
> > Would you by any chance have figured out a way to make AR tacit?
> > *: AR is so much easier to "call"/type than ar '*:'
> > (`'') almost works, though "fails" with nouns, but is useful for an
> > argument that can be verb or gerund.
> > On Thursday, August 16, 2018, 7:48:47 p.m. EDT, Jose Mario Quintana <
> > [email protected]> wrote:
> >
> > One the one hand, I find your adverb neat and clever. On the other
> hand,
> > I
> > like them beautiful and powerful. ;)
> >
> > Powerful?
> >
> > (9!:3) 5 2 NB. Box and linear representations...
> >
> >
> > o=. @:
> > c=. "_
> >
> > ar=. 5!:1@:<
> > an=. <@:((,'0') ,&:< ])f. NB. Atomizing (monadic verb)
> >
> > d=. (a0=. `'') (a1=. (@:[) ((<'&')`) (`:6)) (a2=. (`(<(":0);_)) (`:6))
> > av=. ((ar'a0')`) (`(ar'a1')) (`(ar'a2') ) (`:6)
> > NB. Adverbing a monadic verb (adv)
> > assert 1 4 9 -: 1 2 3 *: av
> >
> > train=. (<'`:') (0:`)(,^:)&6
> > fix=. (<'f.') (0:`)(,^:)
> >
> > af=. an o fix f. NB. Atomizing after fixing a word (monadic verb)
> > aw=. < o ((0;1;0)&{::) NB. Fetching the atomic representation (monadic
> > verb)
> > a3=. (o (train o aw f.)) ('av'f.)
> > NB. train o aw gets the (noun or verb) argument
> >
> > adv=. train o ((af'c') ; ] ; (af'a3')c) f.av
> >
> > The motivation for producing the tacit adverb adv was to reduce directly
> > the production of tacit adverbs to the production of tacit verbs,
> >
> > ag=. (0:`)(,^:) (<@:) (@:(train f.))("0) (train f.@:([ ; (,<,',') ;
> > ])&>/@:)
> >
> > A=. @:]
> >
> > Ad=. ag adv
> >
> > v1`v2`v3`v4 (ar'A')Ad
> > v1@:] , v2@:] , v3@:] , v4@:]
> > ┌─────────┬─┬─────────────────────────────────────┐
> > │┌──┬──┬─┐│,│┌─────────┬─┬───────────────────────┐│
> > ││v1│@:│]││ ││┌──┬──┬─┐│,│┌─────────┬─┬─────────┐││
> > │└──┴──┴─┘│ │││v2│@:│]││ ││┌──┬──┬─┐│,│┌──┬──┬─┐│││
> > │ │ ││└──┴──┴─┘│ │││v3│@:│]││ ││v4│@:│]││││
> > │ │ ││ │ ││└──┴──┴─┘│ │└──┴──┴─┘│││
> > │ │ ││ │ │└─────────┴─┴─────────┘││
> > │ │ │└─────────┴─┴───────────────────────┘│
> > └─────────┴─┴─────────────────────────────────────┘
> >
> > AR=: 1 : '5!:1 <''u'''
> > advE =: 1 : 'AR(u`)(`:6)'
> >
> > AdE=. ag advE
> >
> > v1`v2`v3`v4 (ar'A')AdE
> > v1@:] , v2@:] , v3@:] , v4@:]
> > ┌─────────┬─┬─────────────────────────────────────┐
> > │┌──┬──┬─┐│,│┌─────────┬─┬───────────────────────┐│
> > ││v1│@:│]││ ││┌──┬──┬─┐│,│┌─────────┬─┬─────────┐││
> > │└──┴──┴─┘│ │││v2│@:│]││ ││┌──┬──┬─┐│,│┌──┬──┬─┐│││
> > │ │ ││└──┴──┴─┘│ │││v3│@:│]││ ││v4│@:│]││││
> > │ │ ││ │ ││└──┴──┴─┘│ │└──┴──┴─┘│││
> > │ │ ││ │ │└─────────┴─┴─────────┘││
> > │ │ │└─────────┴─┴───────────────────────┘│
> > └─────────┴─┴─────────────────────────────────────┘
> >
> > (By the way, you might appreciate that both adv and advE, in this
> context,
> > are acting as triple (Curried) adverbs.)
> >
> > The end result is the same; however, one important difference is that
> > (ar'A')Ad is tacit but (ar'A')Ad is not (because AR is not tacit).
> Recall,
> > Piet Google was asking for "a (tacit) way to apply an adverb to each of a
> > list of verbs."
> >
> > Furthermore, adv has the implicit tacit power (provided by (0:`)(,^:)) to
> > perform forbidden tricks that advE cannot; adv actually applies its
> > argument verb to the argument of the resulting adverb even if that
> argument
> > happens to be a verb; for example,
> >
> > *: <adv
> > ┌──┐
> > │*:│
> > └──┘
> >
> > boxes *:,
> >
> > > *: <adv 1 2 3
> > 1 4 9
> >
> > In contrast,
> >
> > *: <advE
> > < *:
> > ┌─┬──┐
> > │<│*:│
> > └─┴──┘
> > > *: <advE 1 2 3
> > 0 1 1
> >
> >
> > On Thu, Aug 16, 2018 at 3:11 PM, 'Pascal Jasmin' via Programming <
> > [email protected]> wrote:
> >
> > > A simpler version of your usual adv definition, that seems pretty
> clean
> > > (without my usual processing)
> > >
> > > AR=: 1 : '5!:1 <''u'''
> > > adv =: 1 : 'AR(u`)(`:6)'
> > >
> > >
> > > 1 2 3 *: adv
> > >
> > > 1 4 9
> > >
> > > not sure if this works with all your utilities.
> >
> >
> ----------------------------------------------------------------------
> 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