Oh, this is interesting -- jsource/test/g5x5.ijt contains an almost working implementation of tree -- which should probably be used to update https://www.jsoftware.com/ioj/iojRep.htm
(This code is used to test the 5!:5 implementation.) (I say "almost working" because the verb 'type' needs to be replaced with (3!:0) or it throws a domain error.) FYI, -- Raul On Fri, Oct 30, 2020 at 12:47 PM Raul Miller <[email protected]> wrote: > > So... here's a first, crude draft of ddrep. It's also obsolete though, > since it includes redundant shape information in certain cases. > > ar =: 5!:1 > boxed =: 32&= @ (3!:0) > oarg =: >@(1&{) > mtv =: i.@0: > paren =: ('('&,)@(,&')') > symb =: $&' '@(e.&'.:')@{. , ] > quote =: '''' > alp =: (,65 97+/i.26){a. > dig =: '0123456789' > > slist =: $&','@(1&=) > shape =: mtv`slist`(,&'$'@":)@.(2&<.@#)`('i.'&,@":) @. (0&e.) @ $ > vchar =: >:@(quote&=)@, quote&,@(,"e)@# , > vbox =: }. @ ; @: (','&,@paren@('<'&,)@lnoun&.>) > value =: vchar`vbox`(":!.18@,) @. (2 32&i.@(3!:0 * *@(*/)@$)) > lnoun =: shape , value > > dotco =: 2&=@# *. e.&'.:'@{: > name =: e.&alp@{. *. *./@(e.&(alp,dig,'_'))@}: *. e.&(alp,dig,'_.:')@{: > num =: e.&(dig,'_')@{. *. *./@(e.&(dig,'_ .ejdr')) > qstr =: mtv -: -.@(~:/\)@e."e -."e@# ] > pstr =: -.@(0&e.)@}:@(+/\)@({&1 _1 0)@('()'&i.) > nopar =: 1&=@# +. dotco +. name +. num +. qstr +. pstr > cp =: paren`] @. nopar > > bp =: ]`cp@.(' '&e.) > hfork =: }.@;@:(' '&,@bp&.>)@] > left =: bp@>@{. > right =: mtv`(cp@>@{:)@.(1&<@#) > ins =: left@] , symb@>@[ , right@] > act =: ;@:(cp&.>)@] > insert =: hfork`hfork`act`act`act`maybedd`ins @. ('23456:'&i.@{.@>@[) > maybedd=:{{ > if. x-:<,':' do. > typ=. '01234' i.left y > if. 5>typ do. > bod=. ".right y > if. 1=#bod do. > '{{',(symb,bod),'}}' return. > else. > ('{{)',typ{'nacvd'),}:;<@,&LF@dtb"1 bod,'}}' return. > end. > end. > end. > x ins y > }} > > ddx =: {. insert ddr&.>@oarg > ddtie =: lr`(}.@;@:('`'&,@cp@ddr&.>)@oarg) @. ((<,'0')&=@{.) > ddgl =: {. insert (ddtie&.>@{. , ddr &.>@}.)@oarg > ddgr =: {. insert (ddr &.>@{. , ddtie&.>@}.)@oarg > ddg =: ddgr`ddgl`ddx @. (i.&(<,'`')@oarg) > ddtil =: ddx`(oarg@>@{.@oarg) @. ((<,'0')&=@{.@>@{.@oarg) > ddcase =: (cp@lnoun@oarg)`ddgl`ddgl`ddg`ddtil`ddx @. ((;:'0@.`:4~')&i.@{.) > ddr =: symb`[email protected] > > ddrep =: ddr @ > @ ar > > Still, ... it's a start... > > Next, I should look at the test cases for lrep in jsource. > > -- > Raul > > On Fri, Oct 30, 2020 at 12:24 PM Raul Miller <[email protected]> wrote: > > > > Actually... where I used '''' I should have used the name 'quote', to > > be consistent with the rest of the code. > > > > I should have noticed that quicker. > > > > Thanks, > > > > -- > > Raul > > > > On Fri, Oct 30, 2020 at 12:22 PM Raul Miller <[email protected]> wrote: > > > > > > Ok... it looks like https://www.jsoftware.com/ioj/iojRep.htm has been > > > damaged. > > > > > > I am also not certain about the tree rep code -- it includes no > > > example uses, and it uses adverb and conjunction trains so that it > > > looks like 'tree' was intended to be an adverb. So maybe there's a > > > line missing somewhere, or something... > > > > > > Anyways, for the lrep definition, qstr should be: > > > > > > qstr =: mtv -: -.@(~:/\)@e.&'''' -.&''''@# ] > > > > > > In other words, remove the first, third, fifth, etc. quote character > > > and all following non-quote characters (up to the second, fourth, > > > sixth, etc. quote characters). Then remove all remaining quote > > > characters. If the result is an empty string, treat this as a quoted > > > string. This is used to determine whether or not parenthesis are > > > needed. > > > > > > For example, '1' doesn't need parenthesis but '1'&= does. > > > > > > Similarly, vchar needs to be defined as > > > > > > vchar =: >:@(quote&=)@, quote&,@(,&'''')@# , > > > > > > (And remember that 'type' needs to be replaced with 3!:0 to make the > > > lrep code on that page work.) > > > > > > But, also, this is an old version of lrep and explicit definitions > > > nowadays get handled differently. But that's actually perfect, since > > > that's what I also want to deal with differently, for direct > > > definitions. I just need to figure out where the logical place would > > > be, to make this change. > > > > > > Thanks, > > > > > > -- > > > Raul > > > > > > On Thu, Oct 29, 2020 at 9:40 PM Henry Rich <[email protected]> wrote: > > > > > > > > No kidding. You can do what I do - add comments. After a while whole > > > > sections become comprehensible. > > > > > > > > Henry Rich > > > > > > > > On 10/29/2020 9:38 PM, Raul Miller wrote: > > > > > I wish there were more text describing its principles. > > > > > > > > > > > > -- > > > > This email has been checked for viruses by AVG. > > > > https://www.avg.com > > > > > > > > ---------------------------------------------------------------------- > > > > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
