Hi all !

I tried to create explicit and tacit definitions of our composition conjunctions. I think the result could possibly be used to clarify the descriptions in NuVoc.

Opinions are welcome, there are probably still some bugs or misunderstandings of function, there could be interesting aspects to discuss.

The printout follows, then my project with definitions, tests and some minor explanations.

In the end of the printout there are some performance measurements. The explicit versions are doing bad in those. The built in versions are slightly faster, which could be expected.

Cheers,

Erling

====Printout=======================

   ts=: 6!:2 , 7!:2@]       NB. Time and space

   At=: 2 : 0
NB. @:
u v"_ y
:
u x v"_ y
)

   <At- 1 2
┌─────┐
│_1 _2│
└─────┘
   NB. < _1_2
   5 <At- 1 2
┌───┐
│4 3│
└───┘
   NB. < 4 3

   NB. @:
   AtTacit=: 2 : '[: u v'


   <AtTacit- 1 2
┌─────┐
│_1 _2│
└─────┘
   NB. < _1_2
   5 <AtTacit- 1 2
┌───┐
│4 3│
└───┘
   NB. < 4 3

   NB. @:
   <AtTacit-
[: < -

   Atop=: 2 : 0
NB. @
u At v"v y
:
x u At v"v y
)

   <Atop- 1 2
┌──┬──┐
│_1│_2│
└──┴──┘
   NB. _1;_2
   5 <Atop- 1 2
┌─┬─┐
│4│3│
└─┴─┘
   NB. 4;3

   NB. @
   AtopTacit=: 2 : '([: u v)"v'

   <AtopTacit- 1 2
┌──┬──┐
│_1│_2│
└──┴──┘
   NB. _1;_2
   5 <AtopTacit- 1 2
┌─┬─┐
│4│3│
└─┴─┘
   NB. 4;3

   NB. @
   <AtopTacit-
([: < -)"0 0 0
   <AtopTacit[
([: < [)"_ _ _
   <AtopTacit i.
([: < i.)"1 _ _

   Appose=: 2 : 0
NB. &:
u v"_ y
:
(v"_ x) u v"_ y
)

   <Appose- 1 2
┌─────┐
│_1 _2│
└─────┘
   NB. < _1 _2
   5 ([:<<)Appose- 4 5
┌───┐
│1 0│
└───┘
   NB. < 1 0

   NB. &:
   ApposeTacitMonadic=: 2 : '[: u [: v ]'
   ApposeTacitDyadic=: 2 : '([: v [) u [: v ]'

   <ApposeTacitMonadic- 1 2
┌─────┐
│_1 _2│
└─────┘
   NB. < _1 _2
   5 ([:<<)ApposeTacitDyadic- 4 5
┌───┐
│1 0│
└───┘
   NB. < 1 0

   NB. &:
   <ApposeTacitMonadic-
[: < [: - ]
   ([:<<)ApposeTacitDyadic-
([: - [) ([: < <) [: - ]

   Compose=: 2 : 0
NB. &
u Appose v"v y
:
x u Appose v"v y
)

   <Compose- 1 2
┌──┬──┐
│_1│_2│
└──┴──┘
   NB. _1;_2
   5 ([:<<)Compose- 4 5
┌─┬─┐
│1│0│
└─┴─┘
   NB. 1;0

   NB. &
   ComposeTacitMonadic=: 2 : '([: u [: v ])"v'
   ComposeTacitDyadic=: 2 : '(([: v [) u [: v ])"v'

   <ComposeTacitMonadic- 1 2
┌──┬──┐
│_1│_2│
└──┴──┘
   NB. _1;_2
   5 ([:<<)ComposeTacitDyadic- 4 5
┌─┬─┐
│1│0│
└─┴─┘
   NB. 1;0

   NB. &
   <ComposeTacitMonadic-
([: < [: - ])"0 0 0
   ([:<<)ComposeTacitDyadic-
(([: - [) ([: < <) [: - ])"0 0 0

   UnderRankInfinite=: 2 : 0
NB. &.:
v"_^:_1 u v"_ y
:
v"_^:_1 (v"_ x) u v"_ y
)

   -UnderRankInfinite> 1 2;3 4
┌─────┐
│_1 _2│
│_3 _4│
└─────┘
   NB. <2 2 $ _1 _2 -3 -4
   (5;6) -UnderRankInfinite> 1 2;3 4
┌───┐
│4 3│
│3 2│
└───┘
   NB. < 2 2 $ 4 3 3 2

   NB. &.:
   UnderRankInfiniteTacitMonadic=: 2 : '[: v^:_1 [: u [: v ]'
   UnderRankInfiniteTacitDyadic=: 2 : '[: v^:_1 ([: v [) u [: v ]'

   -UnderRankInfiniteTacitMonadic> 1 2;3 4
┌─────┐
│_1 _2│
│_3 _4│
└─────┘
   NB. <2 2 $ _1 _2 -3 -4
   (5;6) -UnderRankInfiniteTacitDyadic> 1 2;3 4
┌───┐
│4 3│
│3 2│
└───┘
   NB. < 2 2 $ 4 3 3 2

   NB. &.:
   -UnderRankInfiniteTacitMonadic>
[: >^:_1 [: - [: > ]
   -UnderRankInfiniteTacitDyadic>
[: >^:_1 ([: > [) - [: > ]

   UnderRankV=: 2 : 0
NB. &.
u UnderRankInfinite v"v y
:
x u UnderRankInfinite v"v y
)

   -UnderRankV> 1 2; 3 4
┌─────┬─────┐
│_1 _2│_3 _4│
└─────┴─────┘
   NB. _1 _2; _3 _4
   (5;6) -UnderRankV> 1 2;3 4
┌───┬───┐
│4 3│3 2│
└───┴───┘
   NB. 4 3;3 2

   NB. &.
   UnderRankVTacitMonadic=: 2 : '([: v^:_1 [: u [: v ])"v'
   UnderRankVTacitDyadic=: 2 : '([: v^:_1 ([: v [) u [: v ])"v'

   -UnderRankVTacitMonadic> 1 2; 3 4
┌─────┬─────┐
│_1 _2│_3 _4│
└─────┴─────┘
   NB. _1 _2; _3 _4
   (5;6) -UnderRankVTacitDyadic> 1 2;3 4
┌───┬───┐
│4 3│3 2│
└───┴───┘
   NB. 4 3;3 2

   NB. &.
   -UnderRankVTacitMonadic>
([: >^:_1 [: - [: > ])"0 0 0
   -UnderRankVTacitDyadic>
([: >^:_1 ([: > [) - [: > ])"0 0 0

   n=.500000
   v=.?~n
   $v
500000
   10{.v
415593 299586 376558 161399 308885 477430 286004 354448 123594 75795

   ts'-AtTacit-AtTacit-AtTacit-AtTacit-@- v'
0.240852 1.32199e8
   ts'-AtTacit-AtTacit-AtTacit-AtTacit-AtopTacit- v'
0.2369 1.322e8
   ts'-At-At-At-At-Atop- v'
2.96161 1.32204e8
   ts'-@:-@:-@:-@:-@- v'
0.158078 1.32197e8

====================== Project =======================================

ts=: 6!:2 , 7!:2@]       NB. Time and space

At=: 2 : 0
NB. @:
u v"_ y
:
u x v"_ y
)

<At- 1 2
NB. < _1_2
5 <At- 1 2
NB. < 4 3

NB. @:
AtTacit=: 2 : '[: u v'


<AtTacit- 1 2
NB. < _1_2
5 <AtTacit- 1 2
NB. < 4 3

NB. @:
<AtTacit-

Atop=: 2 : 0
NB. @
u At v"v y
:
x u At v"v y
)

<Atop- 1 2
NB. _1;_2
5 <Atop- 1 2
NB. 4;3

NB. @
AtopTacit=: 2 : '([: u v)"v'

<AtopTacit- 1 2
NB. _1;_2
5 <AtopTacit- 1 2
NB. 4;3

NB. @
<AtopTacit-
<AtopTacit[
<AtopTacit i.

Appose=: 2 : 0
NB. &:
u v"_ y
:
(v"_ x) u v"_ y
)

<Appose- 1 2
NB. < _1 _2
5 ([:<<)Appose- 4 5
NB. < 1 0

NB. &:
ApposeTacitMonadic=: 2 : '[: u [: v ]'
ApposeTacitDyadic=: 2 : '([: v [) u [: v ]'

<ApposeTacitMonadic- 1 2
NB. < _1 _2
5 ([:<<)ApposeTacitDyadic- 4 5
NB. < 1 0

NB. &:
<ApposeTacitMonadic-
([:<<)ApposeTacitDyadic-

Compose=: 2 : 0
NB. &
u Appose v"v y
:
x u Appose v"v y
)

<Compose- 1 2
NB. _1;_2
5 ([:<<)Compose- 4 5
NB. 1;0

NB. &
ComposeTacitMonadic=: 2 : '([: u [: v ])"v'
ComposeTacitDyadic=: 2 : '(([: v [) u [: v ])"v'

<ComposeTacitMonadic- 1 2
NB. _1;_2
5 ([:<<)ComposeTacitDyadic- 4 5
NB. 1;0

NB. &
<ComposeTacitMonadic-
([:<<)ComposeTacitDyadic-

UnderRankInfinite=: 2 : 0
NB. &.:
v"_^:_1 u v"_ y
:
v"_^:_1 (v"_ x) u v"_ y
)

-UnderRankInfinite> 1 2;3 4
NB. <2 2 $ _1 _2 -3 -4
(5;6) -UnderRankInfinite> 1 2;3 4
NB. < 2 2 $ 4 3 3 2

NB. &.:
UnderRankInfiniteTacitMonadic=: 2 : '[: v^:_1 [: u [: v ]'
UnderRankInfiniteTacitDyadic=: 2 : '[: v^:_1 ([: v [) u [: v ]'

-UnderRankInfiniteTacitMonadic> 1 2;3 4
NB. <2 2 $ _1 _2 -3 -4
(5;6) -UnderRankInfiniteTacitDyadic> 1 2;3 4
NB. < 2 2 $ 4 3 3 2

NB. &.:
-UnderRankInfiniteTacitMonadic>
-UnderRankInfiniteTacitDyadic>

UnderRankV=: 2 : 0
NB. &.
u UnderRankInfinite v"v y
:
x u UnderRankInfinite v"v y
)

-UnderRankV> 1 2; 3 4
NB. _1 _2; _3 _4
(5;6) -UnderRankV> 1 2;3 4
NB. 4 3;3 2

NB. &.
UnderRankVTacitMonadic=: 2 : '([: v^:_1 [: u [: v ])"v'
UnderRankVTacitDyadic=: 2 : '([: v^:_1 ([: v [) u [: v ])"v'

-UnderRankVTacitMonadic> 1 2; 3 4
NB. _1 _2; _3 _4
(5;6) -UnderRankVTacitDyadic> 1 2;3 4
NB. 4 3;3 2

NB. &.
-UnderRankVTacitMonadic>
-UnderRankVTacitDyadic>

n=.500000
v=.?~n
$v
10{.v

ts'-AtTacit-AtTacit-AtTacit-AtTacit-@- v'
ts'-AtTacit-AtTacit-AtTacit-AtTacit-AtopTacit- v'
ts'-At-At-At-At-Atop- v'
ts'-@:-@:-@:-@:-@- v'

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

Reply via email to