This is some awesome witchcraft,
func=: 3 : 0
doc=.[(y,'_doc')=: 0 : 0
lines=.LF cut doc
0!:0 > {: lines
examples=.[(y,'_examples')=:3 }. each (#~ (<'ex:') E. 3 {. each [) lines
assert each ". each examples
''
)
This is the witchcraft line
doc=.[(y,'_doc')=: 0 : 0
it reuses the function's own closing )
A modifier version... there is line wrap. A blank line precedes and succeeds
wrap points
lrA =: 1 : '5!:5 < ''u'''
strbracket =: 0&{@:[ , ] , 1&{@:[
func2=: 2 : 0
doc=.[(n,'_doc')=: 0 : 0
lines=.LF cut doc
examples=.[(n,'_examples')=: [:`[:`(;L:1@(([, <@:(' -: (' , (u lrA) ,
')'"_),])/ each))`(;L:1@((([, <@:(' -: '"_),])`([, <@:('(' , (u lrA) ,
')'"_),])/) each) )@.(# every) '()' strbracket leaf ([: }. ';'&cut)each (#~
(<'ex;') E. 3 {. each [) lines
NB. assert each ". each examples
(n) =: u
assert each ". each examples
)
+/ func2 'asdf'
Documentation header for sum
ex; 6 ; 1 2 3
ex; 3 2$4 5 2 3 2 3 ; 3 1 1 ; 1 2
function def was conj u parameter. name is n.
)
asdf_examples
┌────────────────────┬──────────────────────────────────────┐
│(6 ) -: (+/)( 1 2 3)│(3 2$4 5 2 3 2 3) -: (3 1 1)(+/)( 1 2)│
└────────────────────┴──────────────────────────────────────┘
----- Original Message -----
From: Joe Bogner <[email protected]>
To: [email protected]
Cc:
Sent: Friday, November 13, 2015 12:24 PM
Subject: Re: [Jprogramming] essay: toy byte code interpreter
Good reads. Each time I read them I pick up more.
I've gone ahead and rewrote the tacit code in a literate, tdd style:
http://code.jsoftware.com/wiki/User:Joe_Bogner/ByteCodeInterpreter#Tacit_Literate.2C_TDD_Version
The code is significantly longer, but the actual fixed representation
is slightly smaller. I think this style showcases some of what I love
about J - tight implementations, ability to mix code with data, and
testability/interactive nature.
We can question the value of some of the comments (probably better for
chat), but I'll throw it out here too.
Such as:
func 'op_jge'
pops value from stack.
if value is >= 0, sets instruction pointer to the label.
otherwise continues
x: bytecode where (op,param1,param2) and param2 indicates label to jump to
y: bytecodeStruct
(_,_,_) is a placeholder since the true x value is supplied and
not looked up
no change test (ip remains 0 since _1 is top of stack):
ex: 0 -: getIP (JGE,100,0) op_jge _1 op_push
((_,_,_),(LABEL,100,0),:(EXIT,0,0)) setCODE 0 setIP testStruct
greater than jump (ip goes to 1 since 1 is top of stack and 1 is
the label position):
ex: 1 -: getIP (JGE,100,0) op_jge 1 op_push
((_,_,_),(LABEL,100,0),:(EXIT,0,0)) setCODE 0 setIP testStruct
another jump (move label to the end)
ex: 2 -: getIP (JGE,100,0) op_jge 1 op_push
((_,_,_),(EXIT,0,0),:(LABEL,100,0)) setCODE 0 setIP testStruct
jump but label is not found
ex: 3 -: getIP (JGE,999,0) op_jge 1 op_push
((_,_,_),(EXIT,0,0),:(LABEL,100,0)) setCODE 0 setIP testStruct
test equals (this is not yet implemented)
ex: 2 -: getIP (JGE,100,0) op_jge 0 op_push
((_,_,_),(EXIT,0,0),:(LABEL,100,0)) setCODE 0 setIP testStruct
op_jge =: (findLabel setIP ])^:(0<:getVAL) op_pop
)
I suppose this whole block could be represented in another language in
a similar number of lines if we used the idea of that code is
documentation.
You can imagine an implementation like this:
function op_ge(world) {
var val = pop(world);
if (val >= 0) {
return setIP(world, findLabel(world))
}
return world;
}
I think I'd rather read the J version since it's tested/testable and I
don't think pseudo-javascript version is nearly as clear.
On Thu, Nov 12, 2015 at 9:23 PM, 'Pascal Jasmin' via Programming
<[email protected]> wrote:
>
>
>
>
>
>>If someone has a dictionary or other doc reference handy that explains
> this I would be grateful to deepen my understanding, although it seems
> pretty straightforward
>
>
>
> http://code.jsoftware.com/wiki/User:Pascal_Jasmin/3_types_of_adverbs_conjunctions_and_binding
>
> and
>
>
> http://code.jsoftware.com/wiki/User:Pascal_Jasmin/modifiers_in_locales
> ----------------------------------------------------------------------
> 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