Befunge

Uit Wikipedia, de vrije encyclopedie

Befunge is een esoterische programmeertaal die in 1993 ontwikkeld werd door Chris Pressey. Het is een stackgebaseerde taal met reflectie. Een programma wordt geschreven in een rooster van 80 kolommen en 25 rijen. Via richtinstructies wordt de richting die het programma uitgaat gedefinieerd. Op die manier kunnen ook lussen gemaakt worden.

Geschiedenis[bewerken | brontekst bewerken]

Bij de ontwikkeling van Befunge probeerde Pressey een taal te creëren die zo moeilijk mogelijk is om te compileren. Desondanks is er vervolgens een aantal compilers voor geschreven. Nadien is er een aantal uitbreidingen ontwikkeld op de originele Befunge-93. Extensies op en varianten van Befunge worden fungeoids of funges genoemd. De huidige standaard is Funge-98 waar het aantal dimensies aanpasbaar is en die multithreading ondersteunt met meerdere instructiepointers. Als uitvoering van het programma in het 80×25-rooster aan de rand komt gaat het verder aan de overliggende zijde van het rooster. Hierdoor is de originele Befunge niet turingvolledig. Funge-98 elimineerde ook die restrictie.

Instructies[bewerken | brontekst bewerken]

  • 0: Plaats het cijfer "0" op de stack (hetzelfde met 1-9).
  • +: Haal a en b van de stack en plaats hun som terug.
  • -: Als +, maar dan het verschil.
  • *: Als +, maar dan de vermenigvuldiging.
  • /: Als +, maar dan de (afgeronde) deling. Bij nuldeling vragen aan gebruiker.
  • %: Als /, maar dan de restdeling.
  • !: Logische not, bij 0 plaats 1 op de stack en omgekeerd.
  • `: Groter dan, Haal a en b van de stack, als b groter dan a: plaats 1 terug, anders 0.
  • >: Instructie naar rechts.
  • <: Instructie naar links.
  • ^: Instructie naar boven.
  • v: Instructie naar onder.
  • ?: Instructie in willekeurige richting.
  • _: Haal een waarde van de stack, indien 0 instructie naar rechts, anders links.
  • |: Als _, maar dan met onder en boven.
  • ": Plaats alle karakters tot de volgende " op de stack.
  • :: Kopieer de eerste waarde op de stack.
  • \: Verwissel de twee eerste waarden op de stack.
  • $: Haal waarde van de stack.
  • .: Als $, maar met vervolgens uitvoer als integer.
  • ,: Als $, maar met vervolgens uitvoer als karakter.
  • #: Volgende cel overslaan.
  • p: Haal x, y en v van de stack en vervang positie (x,y) in het programma door v.
  • g: Haal x en y van de stack en plaats het karakter op positie (x,y) in het programma terug.
  • &: Vraag de invoer van een cijfer en plaats het in de stack.
  • ~: Als &, maar dan met een karakter.
  • @: Einde programma.

Voorbeelden[bewerken | brontekst bewerken]

Hello World[bewerken | brontekst bewerken]

Het klassieke Hello World:

>              v
v  ,,,,,"Hello"<
>48*,          v
v,,,,,,"World!"<
>25*,@

Willekeurig cijfergenerator[bewerken | brontekst bewerken]

Volgend voorbeeld genereert een oneindige uitvoer van willekeurige cijfers van 1 tot 9:

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

Externe links[bewerken | brontekst bewerken]