Encyclopedia > Befunge

  Article Content

Befunge

Befunge is a stack-based esoteric programming language which differs from conventional languages in that programs are arranged on a two-dimensional grid. 'Arrow' instructions direct the control flow to the left, right, up or down, and loops are constructed by sending the control flow in a circle. This technique is demonstrated in the random number generator program below:

 vv  <      <
     2
     ^  v<
  v1<?>3v4
     ^   ^
 >  >?>  ?>5^
     v   v
  v9<?>7v6
     v  v<
     8
  .  >  >   ^
 ^<

Instructions in Befunge:
0-9Push this number on the stack
+Addition: Pop a and b, then push a+b
-Subtraction: Pop a and b, then push b-a
*Multiplication: Pop a and b, then push a*b
/Integer division: Pop a and b, then push b/a, rounded down. If b is zero, ask the user what result they want.
%Modulo: Pop a and b, then push the remainder of the integer division of b/a. If b is zero, ask the user what result they want.
!Logical NOT: Pop a value; if the value is zero, push 1, otherwise zero.
`Greater than: Pop a and b, then push 1 if b>a, otherwise zero.
>Move right
<Move left
^Move up
vMove down
?Move in a random direction
_Pop a value; move right if value=0, left otherwise
|Pop a value; move down if value=0, up otherwise
"Start string mode: push each character's ASCII value all the way up to the next "
:Duplicate value on top of the stack
\Swap two values on top of the stack
$Pop value from the stack
.Pop value and output as an integer
,Pop value and output as ASCII character
#Trampoline: Skip next cell
gPop y and x, then pushes ASCII value of the character at that position in the program
pPop y, x and v, then change the character at the position x/y in the program to the character with ASCII value v
&Ask user for a number and push it
~Ask user for a character and push ASCII value
@End program

The language was originally created by Chris Pressey in 1993, as an attempt to devise a language as hard to compile as possible - note that the 'p' command allows for self-modifying code. Nevertheless, a number of compilers have subsequently been written. A number of extensions to the original 'Befunge-93' specification also exist, including Funge-98, which extends the concept to an arbitrary number of dimensions and can be multithreaded, with multiple instruction pointers operating simultaneously on the same space.

See also: esoteric programming language



All Wikipedia text is available under the terms of the GNU Free Documentation License

 
  Search Encyclopedia

Search over one million articles, find something about almost anything!
 
 
  
  Featured Article
Islip Terrace, New York

... (3,985.3/mi²). There are 1,784 housing units at an average density of 485.1/km² (1,260.4/mi²). The racial makeup of the town is 95.82% ...

 
 
 
This page was created in 25.2 ms