Interesting Henry,

I had not realized that non-display characters could be inflected, but the 
action of LF takes precedence over the inflection and this is what you are 
trying to get monadic ;: to reflect?

     67 10 58 10 68 {a.
C
:
D
   ;: 67 10 58 10 68 {a.
┌─┬──┬─┬─┐
│C│ :│ │D│
└─┴──┴─┴─┘
   <"0 [ 67 10 58 10 68 {a.  NB. creates what would be the proposed result of ;:
┌─┬─┬─┬─┬─┐
│C│ │:│ │D│   
└─┴─┴─┴─┴─┘

Cheers, bob
   

> On Nov 8, 2020, at 08:35, Henry Rich <[email protected]> wrote:
> 
> CR, LF, and CRLF terminate lines in a script, and are not part of what the 
> script sends to the parser.  Trailing CR, LF, CRCR, and CRLF are removed from 
> lines from the keyboard.
> 
> Raul is working on a model for (;: y), which applies more generally.  
> Non-graphic ASCII characters except for SP and TAB are all treated as letters 
> and are inflectable.
> 
> The change in 9.02 is to make LF special, always creating a word of its own 
> even if followed by :. .  This is so that a quoted string can be scanned by 
> (;: y) to split it into executable lines.
> 
> The C code for (x ;: y) bears no resemblance whatever to this J model.
> 
> (x ;: y) does allow floating-point type, but it converts to integer for each 
> use.  It also audits the state table on each use.  For best speed on repeated 
> use, use
> 
> (x&;: y)
> 
> Henry Rich
> 
> On 11/8/2020 11:05 AM, Don Guinn wrote:
>> True that a J script only contains LF, but if somehow a script were to
>> contain CR instead of LF it would be treated as if it contained LF. Windows
>> treats LF, CR and CR,LF in a script as the same. I don't know how LINUX
>> would handle CR. But if CR should be accepted like LF, I don't know how the
>> sequence LF,CR should be treated. Should each be put in separate words or
>> should they be in one word together?
>> 
>> And my comment about converting ms to integer. Not a problem for SQ, but
>> could be a problem if put into the interpreter as C code. Simpler to avoid
>> the problem now than later.
>> 
>> On Sun, Nov 8, 2020 at 8:44 AM Raul Miller <[email protected]> wrote:
>> 
>>> That's not where we want to be.
>>> 
>>>    #;:'NB.',LF
>>> 2
>>>    #;:'NB.',CR
>>> 1
>>> 
>>> Also:
>>>    (;:32{.a.)-:(0;sj;mj) sq 32{.a.
>>> 1
>>> 
>>> Thanks,
>>> 
>>> --
>>> Raul
>>> 
>>> On Sun, Nov 8, 2020 at 10:03 AM Don Guinn <[email protected]> wrote:
>>>> Would suggest that you add CR to the line 10 of sj as J treats CR like LF
>>>> in a J script:
>>>> 
>>>> mj=:10 (10 13)}mj  NB. LF and CR
>>>> 
>>>> On Sun, Nov 8, 2020 at 6:38 AM Raul Miller <[email protected]>
>>> wrote:
>>>>> I tested for that case:
>>>>> 
>>>>>    #;:'NB.',LF,LF
>>>>> 3
>>>>>   #(0;sj;mj) sq 'NB.',LF,LF
>>>>> 3
>>>>>    #(0;sj;mj) sq 'NB.',LF,LF,LF
>>>>> 4
>>>>> 
>>>>> Thanks,
>>>>> 
>>>>> --
>>>>> Raul
>>>>> 
>>>>> On Sat, Nov 7, 2020 at 7:00 PM Henry Rich <[email protected]>
>>> wrote:
>>>>>> I have only desk-checked this.  { } look OK; but it looks like LF.
>>> will
>>>>>> inflect the LF.  I could be way off in my analysis.
>>>>>> 
>>>>>> LF outside of quotes is always a word of its own, admitting no
>>>>> inflections.
>>>>>> Henry Rich
>>>>>> 
>>>>>> On 11/7/2020 5:04 PM, Raul Miller wrote:
>>>>>>> Oops, typo in the documentation string that I didn't catch in the
>>> copy
>>>>>>> and paste.
>>>>>>> 
>>>>>>> Fixed here:
>>>>>>> 
>>>>>>> mj=: 256$0                     NB. X other
>>>>>>> mj=: 1 (9,a.i.' ')}mj          NB. S space and tab
>>>>>>> mj=: 2 (,(a.i.'Aa')+/i.26)}mj  NB. A A-Z a-z excluding N B
>>>>>>> mj=: 3 (a.i.'N')}mj            NB. N the letter N
>>>>>>> mj=: 4 (a.i.'B')}mj            NB. B the letter B
>>>>>>> mj=: 5 (a.i.'0123456789_')}mj  NB. 9 digits and _
>>>>>>> mj=: 6 (a.i.'.')}mj            NB. . the decimal point
>>>>>>> mj=: 7 (a.i.':')}mj            NB. : the colon
>>>>>>> mj=: 8 (a.i.'''')}mj           NB. Q quote
>>>>>>> mj=: 9 (a.i.'{')}mj            NB. { the left curly brace
>>>>>>> mj=:10 (10)} mj                NB. LF
>>>>>>> mj=:11 (a.i.'}')}mj            NB. } the right curly brace
>>>>>>> 
>>>>>>> sj=: 0 10#:10*}.".;._2(0 :0)
>>>>>>> ' X   S   A   N   B   9   .   :   Q    {    LF   }']0
>>>>>>>   1.1 0.0 2.1 3.1 2.1 6.1 1.1 1.1 7.1 11.1 10.1 12.1 NB. 0 space
>>>>>>>   1.2 0.3 2.2 3.2 2.2 6.2 1.0 1.0 7.2 11.2 10.2 12.2 NB. 1 other
>>>>>>>   1.2 0.3 2.0 2.0 2.0 2.0 1.0 1.0 7.2 11.2 10.2 12.2 NB. 2 alp/num
>>>>>>>   1.2 0.3 2.0 2.0 4.0 2.0 1.0 1.0 7.2 11.2 10.2 12.2 NB. 3 N
>>>>>>>   1.2 0.3 2.0 2.0 2.0 2.0 5.0 1.0 7.2 11.2 10.2 12.2 NB. 4 NB
>>>>>>>   9.0 9.0 9.0 9.0 9.0 9.0 1.0 1.0 9.0  9.0 10.2  9.0 NB. 5 NB.
>>>>>>>   1.4 0.5 6.0 6.0 6.0 6.0 6.0 1.0 7.4 11.4 10.2 12.4 NB. 6 num
>>>>>>>   7.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 8.0  7.0  7.0  7.0 NB. 7 '
>>>>>>>   1.2 0.3 2.2 3.2 2.2 6.2 1.2 1.2 7.0 11.2 10.2 12.2 NB. 8 ''
>>>>>>>   9.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0  9.0 10.2  9.0 NB. 9 comment
>>>>>>>   1.2 0.2 2.2 3.2 2.2 6.2 1.0 1.0 7.2 11.2 10.2 12.2 NB. 10 LF
>>>>>>>   1.2 0.3 2.2 3.2 2.2 6.2 1.0 1.0 7.2 13.0 10.2  1.2 NB. 11 {
>>>>>>>   1.2 0.3 2.2 3.2 2.2 6.2 1.0 1.0 7.2  1.2 10.2 14.0 NB. 12 }
>>>>>>>   1.2 0.3 2.2 3.2 2.2 6.2 1.7 1.7 7.2  1.2 10.2  1.2 NB. 13 {{
>>>>>>>   1.2 0.3 2.2 3.2 2.2 6.2 1.7 1.7 7.2  1.2 10.2  1.2 NB. 14 }}
>>>>>>> )
>>>>>>> 
>>>>>>> On Sat, Nov 7, 2020 at 5:02 PM Raul Miller <[email protected]>
>>>>> wrote:
>>>>>>>> I think this will do that:
>>>>>>>> 
>>>>>>>> mj=: 256$0                     NB. X other
>>>>>>>> mj=: 1 (9,a.i.' ')}mj          NB. S space and tab
>>>>>>>> mj=: 2 (,(a.i.'Aa')+/i.26)}mj  NB. A A-Z a-z excluding N B
>>>>>>>> mj=: 3 (a.i.'N')}mj            NB. N the letter N
>>>>>>>> mj=: 4 (a.i.'B')}mj            NB. B the letter B
>>>>>>>> mj=: 5 (a.i.'0123456789_')}mj  NB. 9 digits and _
>>>>>>>> mj=: 6 (a.i.'.')}mj            NB. . the decimal point
>>>>>>>> mj=: 7 (a.i.':')}mj            NB. : the colon
>>>>>>>> mj=: 8 (a.i.'''')}mj           NB. Q quote
>>>>>>>> mj=: 9 (a.i.'{')}mj            NB. { the left curly brace
>>>>>>>> mj=:10 (10)} mj                NB. LF
>>>>>>>> mj=:11 (a.i.'}')}mj            NB. } the right curly brace
>>>>>>>> 
>>>>>>>> sj=: 0 10#:10*}.".;._2(0 :0)
>>>>>>>> ' X   S   A   N   B   9   .   :   Q    {    }   LF ']0
>>>>>>>>   1.1 0.0 2.1 3.1 2.1 6.1 1.1 1.1 7.1 11.1 10.1 12.1 NB. 0 space
>>>>>>>>   1.2 0.3 2.2 3.2 2.2 6.2 1.0 1.0 7.2 11.2 10.2 12.2 NB. 1 other
>>>>>>>>   1.2 0.3 2.0 2.0 2.0 2.0 1.0 1.0 7.2 11.2 10.2 12.2 NB. 2 alp/num
>>>>>>>>   1.2 0.3 2.0 2.0 4.0 2.0 1.0 1.0 7.2 11.2 10.2 12.2 NB. 3 N
>>>>>>>>   1.2 0.3 2.0 2.0 2.0 2.0 5.0 1.0 7.2 11.2 10.2 12.2 NB. 4 NB
>>>>>>>>   9.0 9.0 9.0 9.0 9.0 9.0 1.0 1.0 9.0  9.0 10.2  9.0 NB. 5 NB.
>>>>>>>>   1.4 0.5 6.0 6.0 6.0 6.0 6.0 1.0 7.4 11.4 10.2 12.4 NB. 6 num
>>>>>>>>   7.0 7.0 7.0 7.0 7.0 7.0 7.0 7.0 8.0  7.0  7.0  7.0 NB. 7 '
>>>>>>>>   1.2 0.3 2.2 3.2 2.2 6.2 1.2 1.2 7.0 11.2 10.2 12.2 NB. 8 ''
>>>>>>>>   9.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0 9.0  9.0 10.2  9.0 NB. 9 comment
>>>>>>>>   1.2 0.2 2.2 3.2 2.2 6.2 1.0 1.0 7.2 11.2 10.2 12.2 NB. 10 LF
>>>>>>>>   1.2 0.3 2.2 3.2 2.2 6.2 1.0 1.0 7.2 13.0 10.2  1.2 NB. 11 {
>>>>>>>>   1.2 0.3 2.2 3.2 2.2 6.2 1.0 1.0 7.2  1.2 10.2 14.0 NB. 12 }
>>>>>>>>   1.2 0.3 2.2 3.2 2.2 6.2 1.7 1.7 7.2  1.2 10.2  1.2 NB. 13 {{
>>>>>>>>   1.2 0.3 2.2 3.2 2.2 6.2 1.7 1.7 7.2  1.2 10.2  1.2 NB. 14 }}
>>>>>>>> )
>>>>>>>> 
>>>>>>>> 
>>>>>>>> Thanks,
>>>>>>>> 
>>>>>>>> --
>>>>>>>> Raul
>>>>>>>> 
>>>>>>>> On Sat, Nov 7, 2020 at 2:19 PM Henry Rich <[email protected]>
>>>>> wrote:
>>>>>>>>> That's good.  If anybody can see a problem with adding an opcode
>>> 7,
>>>>>>>>> titled 'backtrack', which goes back to the previous character
>>> without
>>>>>>>>> outputting anything, please speak up.
>>>>>>>>> 
>>>>>>>>> To match (;: y), your state machine needs to treat LF as a
>>> special
>>>>>>>>> character that ends a comment, does not end a quoted string, and
>>>>> cannot
>>>>>>>>> be inflected.  When not in a quoted string it becomes a word by
>>>>> itself.
>>>>>>>>> Henry Rich
>>>>>>>>> 
>>>>>>>>> On 11/7/2020 1:53 PM, Raul Miller wrote:
>>>>>>>>>> I took the model proposed at
>>>>>>>>>> 
>>>>> https://code.jsoftware.com/wiki/Vocabulary/semico#Running_the_Machine
>>>>>>>>>> and fixed a few problems and added an opcode 7, and built a
>>> state
>>>>>>>>>> table that satisfies the tests I put it through.
>>>>>>>>>> 
>>>>>>>>>> It seems to work:
>>>>>>>>>> 
>>>>>>>>>> sq=:4 :0
>>>>>>>>>>     'f s m ijrd'=. x,(#x)}.0;0;'';0 _1 0 _1 assert. 2 <: #x
>>>>>>>>>>     'i j r d'=. ijrd
>>>>>>>>>>     'p pj'=. _1,j
>>>>>>>>>>     if. 0 < L. m do.
>>>>>>>>>>       n=. (y i.~;m) { (#m),~(#&>m)#i.#m
>>>>>>>>>>     elseif. ''-:m do.
>>>>>>>>>>       n=. y
>>>>>>>>>>     elseif. do.
>>>>>>>>>>       n=. (a.i.y){m
>>>>>>>>>>     end.
>>>>>>>>>>     result=. f {:: (0#a:);'';i.&.>0 2;0;0 3;0 6
>>>>>>>>>>     while. i <: #n do.
>>>>>>>>>>       if. i = #n do.
>>>>>>>>>>         if. d >: 0 do. 'newrow action' =. (<r,c =. d) { s
>>>>>>>>>>         elseif. j = _1 do. break.
>>>>>>>>>>         elseif. f = 5 do. break.  NB. Don't output final flush
>>>>>>>>>>         elseif. do. 'newrow action' =. 0 5
>>>>>>>>>>         end.
>>>>>>>>>>       else. 'newrow action' =. (<r,c =. i { n) { s
>>>>>>>>>>       end.
>>>>>>>>>>       assert. newrow < #s
>>>>>>>>>>       if. f = 5 do. result =. result , i, j, r, c, newrow,
>>> action
>>>>> end.
>>>>>>>>>>       select. action
>>>>>>>>>>         case. 0 do.
>>>>>>>>>>         case. 6 do. break.
>>>>>>>>>>         case. 7 do. i=. i-2
>>>>>>>>>>         fcase. 2;3;4;5 do. NB. emit
>>>>>>>>>>           assert. j >: 0
>>>>>>>>>>           if. f ~: 5 do.
>>>>>>>>>>             ej=. ((r=p)*action>3) { j,pj
>>>>>>>>>>             select. f
>>>>>>>>>>               case. 0 do. newdata =. < ej }. i {. y
>>>>>>>>>>               case. 1 do. newdata =. ej }. i {. y
>>>>>>>>>>               case. 2 do. newdata =. ej , i
>>>>>>>>>>               case. 3 do. newdata =. (}:$s) #: r,c
>>>>>>>>>>               case. 4 do. newdata =. ej , (i-ej) , (}:$s) #: r,c
>>>>>>>>>>               case. do.
>>>>>>>>>>                 'Invalid output type' 13!:8 (1)
>>>>>>>>>>             end.
>>>>>>>>>>             if. (action <: 3)+.r~:p do. result =. result ,
>>> newdata
>>>>>>>>>>             else. result =. newdata (<:#result)} result
>>>>>>>>>>             end.
>>>>>>>>>>           end.
>>>>>>>>>>           if. r~:p do. pj=. j end.
>>>>>>>>>>           p=. action {_1 _1 _1 _1,r,r
>>>>>>>>>>         case. 1 do.
>>>>>>>>>>           j =. (action e. 1 2 4) { _1,i
>>>>>>>>>>         case. do.
>>>>>>>>>>           'Invalid action' 13!:8 (1)
>>>>>>>>>>       end. NB. select action
>>>>>>>>>>       r =. newrow
>>>>>>>>>>       i =. i + 1
>>>>>>>>>>     end.
>>>>>>>>>>     result
>>>>>>>>>> )
>>>>>>>>>> 
>>>>>>>>>> mj=: 256$0                     NB. X other
>>>>>>>>>> mj=: 1 (9,a.i.' ')}mj          NB. S space and tab
>>>>>>>>>> mj=: 2 (,(a.i.'Aa')+/i.26)}mj  NB. A A-Z a-z excluding N B
>>>>>>>>>> mj=: 3 (a.i.'N')}mj            NB. N the letter N
>>>>>>>>>> mj=: 4 (a.i.'B')}mj            NB. B the letter B
>>>>>>>>>> mj=: 5 (a.i.'0123456789_')}mj  NB. 9 digits and _
>>>>>>>>>> mj=: 6 (a.i.'.')}mj            NB. . the decimal point
>>>>>>>>>> mj=: 7 (a.i.':')}mj            NB. : the colon
>>>>>>>>>> mj=: 8 (a.i.'''')}mj           NB. Q quote
>>>>>>>>>> mj=: 9 (a.i.'{')}mj            NB. { the left curly brace
>>>>>>>>>> mj=:10 (a.i.'}')}mj            NB. } the right curly brace
>>>>>>>>>> 
>>>>>>>>>> NB.0   1    2   3     4    5    6    7    8     9     10
>>>>>>>>>> sj=: _2]\"1 }.".;._2 (0 : 0)
>>>>>>>>>> ' X    S    A    N    B    9    .    :    Q     {      } ']0
>>>>>>>>>>    1 1  0 0  2 1  3 1  2 1  6 1  1 1  1 1  7 1  10 1  11 1
>>> NB.  0
>>>>> space
>>>>>>>>>>    1 2  0 3  2 2  3 2  2 2  6 2  1 0  1 0  7 2  10 2  11 2
>>> NB.  1
>>>>> other
>>>>>>>>>>    1 2  0 3  2 0  2 0  2 0  2 0  1 0  1 0  7 2  10 2  11 2
>>> NB.  2
>>>>> alp/num
>>>>>>>>>>    1 2  0 3  2 0  2 0  4 0  2 0  1 0  1 0  7 2  10 2  11 2
>>> NB.  3 N
>>>>>>>>>>    1 2  0 3  2 0  2 0  2 0  2 0  5 0  1 0  7 2  10 2  11 2
>>> NB.  4
>>>>> NB
>>>>>>>>>>    9 0  9 0  9 0  9 0  9 0  9 0  1 0  1 0  9 0   9 0   9 0
>>> NB.  5
>>>>> NB.
>>>>>>>>>>    1 4  0 5  6 0  6 0  6 0  6 0  6 0  1 0  7 4  10 4  11 4
>>> NB.  6
>>>>> num
>>>>>>>>>>    7 0  7 0  7 0  7 0  7 0  7 0  7 0  7 0  8 0   7 0   7 0
>>> NB.  7 '
>>>>>>>>>>    1 2  0 3  2 2  3 2  2 2  6 2  1 2  1 2  7 0  10 2  11 2
>>> NB.  8
>>>>> ''
>>>>>>>>>>    9 0  9 0  9 0  9 0  9 0  9 0  9 0  9 0  9 0   9 0   9 0
>>> NB.  9
>>>>> comment
>>>>>>>>>>    1 2  0 3  2 2  3 2  2 2  6 2  1 0  1 0  7 2  12 0   1 2  NB.
>>> 10 {
>>>>>>>>>>    1 2  0 3  2 2  3 2  2 2  6 2  1 0  1 0  7 2   1 2  13 0  NB.
>>> 11 }
>>>>>>>>>>    1 2  0 3  2 2  3 2  2 2  6 2  1 7  1 7  7 2   1 2   1 2  NB.
>>> 12
>>>>> {{
>>>>>>>>>>    1 2  0 3  2 2  3 2  2 2  6 2  1 7  1 7  7 2   1 2   1 2  NB.
>>> 13
>>>>> }}
>>>>>>>>>> )
>>>>>>>>>> 
>>>>>>>>>>      (0;sj;mj) sq '{{+/y}}'
>>>>>>>>>> +--+-+-+-+--+
>>>>>>>>>> |{{|+|/|y|}}|
>>>>>>>>>> +--+-+-+-+--+
>>>>>>>>>>      (0;sj;mj) sq '{{+/y}}}'
>>>>>>>>>> +--+-+-+-+--+-+
>>>>>>>>>> |{{|+|/|y|}}|}|
>>>>>>>>>> +--+-+-+-+--+-+
>>>>>>>>>>      (0;sj;mj) sq '{{.+/y}}.'
>>>>>>>>>> +-+--+-+-+-+-+--+
>>>>>>>>>> |{|{.|+|/|y|}|}.|
>>>>>>>>>> +-+--+-+-+-+-+--+
>>>>>>>>>> 
>>>>>>>>>> Thanks,
>>>>>>>>>> 
>>>>>>>>> --
>>>>>>>>> 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
>>>>>> 
>>>>>> --
>>>>>> 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
>>>>> 
>>>> ----------------------------------------------------------------------
>>>> 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
> 
> 
> -- 
> 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

Reply via email to