Yes. (;: y) in the beta works the new way. Raul has done the work to
bring the model using (x ;: y) up to date.
;: 67 10 58 10 68 {a. NB. beta-l
+-+-+-+-+-+
|C| |:| |D|
+-+-+-+-+-+
Henry Rich
On 11/8/2020 12:12 PM, 'robert therriault' via Programming wrote:
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
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm