(I thought that this was documented behavior?)
Thanks,
—
Raul
On Wednesday, August 22, 2018, 'Pascal Jasmin' via Programming <
[email protected]> wrote:
You've brought up another undocumented feature.
'' $ 1
1
'' $ , 1
1
'' $ i.2 2
0 1
'' $ 1 2
1
'' $ ,: 1 2
1 2
'' $ i.0
|length error
'' $ y returns the first item of y if one exists. The difference with {.
is that the latter will fill if no item exists.
On Tuesday, August 21, 2018, 5:12:37 p.m. EDT, Jose Mario Quintana <
[email protected]> wrote:
> (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
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm