sorry for leaving console output in there,

Your output seems incorrect, perhaps email is eating spaces. the correct value 
for p is:

p=: 3 18$'>"Hello World!" v v             @#< >55+, "from J"^   '

    new_befunge_ < p 
┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐ 
│H│e│l│l│o│ │W│o│r│l│d│!│ │f│r│o│m│ │J│ 
└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘ 


repasting a cleaner version:
---------------------------
Note 'BEHOLD BEFUNGE 2.0' 
first > is optional 
arbitrary sized matrix.  Extensible to multidimensional matrixes. 
allows list instead of matrix (corrected with leading axis) also scalar @ is 
valid. 
debug support (run x instructions then return. (with stack and ip) resume where 
left off) 
debug support includes tracing each instruction with boxed power parameter 
start/resume at any point with any stack 
user input functions are aribtrary J functions.  Can be used to change 
dimension or cause other side effects. 
invalid unhandled instructions conveniently turned into 0 
to make language even saner, p helpfully changed to use 3 stack parameters 
domain errors helpfully teach you to write your code better. 
) 
cocurrent 'z' 
defaults1 =: ([`]@.(0=#@>@[)) 
defaults =: defaults1"0 0 f. 
fixlenx =: 1 : (':';'((#y) {. x) u y') 
eval =: 1 : ' a: 1 :  m' 
pD_z_ =:  1!:2&2 
NB. implement with "global"/instance vars for inputcb, prog 
cocurrent 'befunge' 
new =: 3 : 0 
o =. lastbefunge_base_ =: conew 'befunge' 
create__o y 
) 
create =: 3 : 0 
'P startp cbN cbT' =: y defaults fixlenx a:;_;'<@?@2:';'3 : '' ;/ ''''Hello 
World!'''' '' ' 
while. 2>#$P do. P =: ,: P end. 
cbN =: cbN eval 
cbT =: cbT eval 
'h w' =: $ P 
ptr =: 0 0 
stack =: a: 
quotemode=: 0 
startp start a: 
) 
NB. op list. functions always provided inst ptr and stack. 
T =: cutLF 0 : 0 
 ] 
>3 : ('y';~'nextptr =: nextptrl') 
<3 : ('y';~'nextptr =: nextptrr') 
^3 : ('y';~'nextptr =: nextptru') 
v3 : ('y';~'nextptr =: nextptrd') 
@3 : ('y';~'nextptr =: nextptrend') 
+(_2 }. ]) , <@:+/@:>@:(_2 {. ]) 
"3 : ('y';~'quotemode=: -. quotemode') 
,(_1 }. ]) , {&a. each@:{: 
#3 : ('y';~'domod=: (([: nextptr each {.) , }.)' ) 
&] , cbN 
~] , cbT 
) 
execstep =: 4 : 0 NB. x is command, y is stack. returns new stack 
if. quotemode do. if. '"' ~: x do. y , < x return. end.  end. 
i =. x i.~ {. &> T 
if. i = # T do.  y , < 0 ". x  return. end. 
(}. > i{T) eval y 
) 
domod=: ] 
mod =: 3 : 0 
o =. domod y 
domod =: ] 
o 
) 
NB. y is ptr (h w) ;stack (list of boxed stack values) 
start =: 4 : 0 
y =. y defaults fixlenx ptr;stack 
o =. mod@:(([: nextptr each {.) , }. execstep~ P {~ {.)^:x y 
 ptr =: > {. o 
 stack =: }. o 
if. '@' = P{~ < ptr do. 2}. o else. o end. 
) 
getptr =: 3 : ' P{~  < ptr"_^:(0=#) y' 
NB. y is just ptr. function gets modified by ><^v. initlmode 
nextptr =: nextptrl =: 3 : '({. , [: 0:^:(w<]) >:@:{: ) y' 
nextptrr =: 3 : '({. , [: w"_^:(0>]) <:@:{: ) y' 
nextptru =: 3 : '({: ,~ [: h"_^:(0>]) <:@:{.) y' 
nextptrd =: 3 : '({: ,~ [: 0:^:(h<]) >:@:{.) y' 
nextptrend =: ] 
cocurrent 'base' 
p =: > cutLF 0 : 0 
>"Hello World!" v 
v             @#< 
>55+, "from J"^ 
) 
NB. usage see 
http://www.reddit.com/r/dailyprogrammer/comments/270mll/612014_challenge_164_hard_what_the_funge_is_this/chwg1vh

----- Original Message -----
From: Raul Miller <[email protected]>
To: Programming forum <[email protected]>
Cc: 
Sent: Sunday, June 1, 2014 4:20:25 PM
Subject: Re: [Jprogramming] Befunge in J

I've got to do some other things right now, but as a quick note:

   ; newbefunge p;49
|value error: newbefunge
|   ;    newbefunge p;49

reddit interpreted _befunge_ as italics for that part of the command.

Of course, this works:

   ; new_befunge_ p;49
0 49
┌┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
││0│0│0│0│0│0│0│0│0│0│0│0│0│0│0│
└┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
0 49 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

but if anyone ever tries the reddit version they'll have problems.

Thanks,

-- 
Raul






>    ; new_befunge_ < p
> Hello World!
> from J
>
>
>
> the number parameter tells it how many steps to make in order to guard from 
> non termination.
>  redditfmt new_befunge_ p;19
>      ┌────┬┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
>      │1 13││H│e│l│l│o│ │W│o│r│l│d│!│
>      └────┴┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
> when it doesn't complete to end, it returns the stack pointer together with 
> stack.
> can ask for the current code pointer value
>    quote getptr__lastbefunge  ''
> ' '  NB. just a space
> or character at any pointer:
>    getptr__lastbefunge 0 0
>>
> can resume where left off
>   33 start__lastbefunge  a:
>     ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
>      │H│e│l│l│o│ │W│o│r│l│d│!│ │r│e│d│d│i│t│
>      └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
>
> says to go forward another 33 steps.  When it terminates (hits @) returns 
> just the stack.
> can invoke a befunge program in one line specifying program as a string
> new_befunge_ '@';3  NB. running too many steps is ok.
>    new_befunge_ '23+@';6  NB. first > is optional
> 5
>  new_befunge_ 12 ;~ 2 4 $ '23+v@  <'
> same program as above.  J allows to format a table in one line:
> new_befunge_  < 2 4 $ '23+v@  <'
> also same program... number of steps is optional.
>
> parameters are implemented.  Pass a user function that could return any 
> number of new stack items to add.  all of these functions return 5
>   new_befunge_  '2&+@';_;'<@3:'
>   new_befunge_  '&+@';_;'2;3:'
>   new_befunge_  '2&+@';_;'1 + leaf {:'
> last function takes the last value on stack to modify it(add 1+2 in J code + 
> 2 on stack by befunge code)
> ----------------------------------------------------------------------
> 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

Reply via email to