Hoppa till innehållet

Befunge: Skillnad mellan sidversioner

Från Wikipedia
Innehåll som raderades Innehåll som lades till
Hacker 112 (Diskussion | Bidrag)
Ändrar från föråldrade <source> till <syntaxhighlight>
 
(3 mellanliggande sidversioner av 3 användare visas inte)
Rad 1: Rad 1:
{{databox}}
'''Befunge''' är ett [[Stack (datastruktur)|stack]]-baserat [[esoteriskt]] [[programspråk]] med den ovanliga egenskapen att instruktionerna är ordnade i ett tvådimensionellt fält. Instruktionspekaren kan därför gå i fyra olika riktningar (uppåt, nedåt, vänster eller höger) och kan byta riktning vid utsatta pilar eller villkor.
'''Befunge''' är ett [[Stack (datastruktur)|stack]]-baserat [[esoteriskt programspråk]] med den ovanliga egenskapen att instruktionerna är ordnade i ett tvådimensionellt fält. Instruktionspekaren kan därför gå i fyra olika riktningar (uppåt, nedåt, vänster eller höger) och kan byta riktning vid utsatta pilar eller villkor.


Befunge kan också vara självmodifierande i och med att man under körning kan ändra instruktioner eller data i celler med hjälp av instruktionerna ''p'' och ''g''.
Befunge kan också vara självmodifierande i och med att man under körning kan ändra instruktioner eller data i celler med hjälp av instruktionerna ''p'' och ''g''.
Rad 11: Rad 12:
=== Hello World ===
=== Hello World ===
Följande kodstycke är det klassiska Hello World-exemplet.
Följande kodstycke är det klassiska Hello World-exemplet.
<source lang="c">
<syntaxhighlight lang="c">
> v
> v
v"Hello World!"<
v"Hello World!"<
Rad 17: Rad 18:
>:|
>:|
@
@
</syntaxhighlight>
</source>


=== Bubblesort ===
=== Bubblesort ===
Bubblesort är en vanlig algoritm för att sortera en lista. Denna implementation sorterar heltal som matas in från tangentbordet. Det här exemplet är något mer komplext och visar att Befunge kan vara i klass med [[Brainfuck]] när det gäller både att läsa och skriva kod.
Bubblesort är en vanlig algoritm för att sortera en lista. Denna implementation sorterar heltal som matas in från tangentbordet. Det här exemplet är något mer komplext och visar att Befunge kan vara i klass med [[Brainfuck]] när det gäller både att läsa och skriva kod.
<source lang="c">
<syntaxhighlight lang="c">
V >v>+v> >v>v>g1-v>v>v>v>v>v>.2v
V >v>+v> >v>v>g1-v>v>v>v>v>v>.2v
>+\:| 1 2 $3300 3g352g14052^g<5
>+\:| 1 2 $3300 3g352g14052^g<5
Rad 37: Rad 38:
#
#
^ p0<<3< $<
^ p0<<3< $<
</syntaxhighlight>
</source>


== Instruktioner ==
== Instruktioner ==
Rad 69: Rad 70:
== Externa länkar ==
== Externa länkar ==
* [http://www.teepop.net/fungus/ Fungus är ett lättanvänt IDE för Befunge.]
* [http://www.teepop.net/fungus/ Fungus är ett lättanvänt IDE för Befunge.]
* [http://catseye.mine.nu:8080/projects/befunge93/doc/befunge93.html En mer genomgående beskrivning av Befunge-93.]
* [https://web.archive.org/web/20050828165124/http://catseye.mine.nu:8080/projects/befunge93/doc/befunge93.html En mer genomgående beskrivning av Befunge-93.]


[[Kategori:Esoteriska programspråk]]
[[Kategori:Esoteriska programspråk]]

Nuvarande version från 21 november 2020 kl. 13.20

Befunge
Programspråk Redigera Wikidata
Esoteriskt programmeringsspråk, programmeringsspråk Redigera Wikidata
Tillkomst1993 Redigera Wikidata
Influerad avForth, Brainfuck, FALSE Redigera Wikidata
Prog­ram­me­rings­pa­ra­digmesoterisk programmering Redigera Wikidata
Officiell webbplatscatseye.tc/node/Befunge-93.html Redigera Wikidata

Befunge är ett stack-baserat esoteriskt programspråk med den ovanliga egenskapen att instruktionerna är ordnade i ett tvådimensionellt fält. Instruktionspekaren kan därför gå i fyra olika riktningar (uppåt, nedåt, vänster eller höger) och kan byta riktning vid utsatta pilar eller villkor.

Befunge kan också vara självmodifierande i och med att man under körning kan ändra instruktioner eller data i celler med hjälp av instruktionerna p och g.

Språket har också sagts vara Turingkomplett, men det är inte bevisat.

Originalspecifikationen Befunge-93 skapades av Chris Pressey, 1993. Syftet var att skapa ett programspråk som var så svårt som möjligt att kompilera. Notera att det är mycket lätt att göra en interpretator för koden men näst intill omöjligt att kompilera till maskinkod. Ett flertal nyare versioner av Befunge-93 har uppkommit under åren. Däribland finns den mer populära Funge-98 som klarar av ett större fält (80x24 är gränsen i Befunge-93), multipla instruktionspekare och en, två eller tre dimensioner istället för originalets två dimensioner.

Följande kodstycke är det klassiska Hello World-exemplet.

 >              v
 v"Hello World!"<
 v,<
 >:|
   @

Bubblesort är en vanlig algoritm för att sortera en lista. Denna implementation sorterar heltal som matas in från tangentbordet. Det här exemplet är något mer komplext och visar att Befunge kan vara i klass med Brainfuck när det gäller både att läsa och skriva kod.

 V    >v>+v> >v>v>g1-v>v>v>v>v>v>.2v  
  >+\:| 1 2  $3300   3g352g14052^g<5  
  *v:<  g 0p  0gg^3_v0+02*0+:p2>*+^*  
 321 ^ <0 p0  g\>2v:3g*g-+1:-:^<>v@,  
 55-v < ^< 4  2^_         ^11> |+g,  
 5210  >v2 p  5  v<`02221pv<^g<2*.*  
 *\02>:|\p 0  >v:^g-5-g30 >v05225  
 *0p0&v<2+ ^<^<2-2gv<22200p 404>^>^  
 1g\pg>#5  v3  *15+1 5\53g4>|g^<   < 
 00p$0  2* $:  +\2*- 2g2p10→# ^     
 p1 $2  >^ >^  >^>^  *+*+-g\         
 >^<>^    <   ^ p03< >^>^3>^ >\v     
                                     
              #                      
              ^        p0<<3< $<

Instruktioner

[redigera | redigera wikitext]
  • + Addition. Tar a och b från stacken och lägger svaret från b+a på stacken.
  • - Subtraktion. Tar a och b från stacken och lägger svaret från b-a på stacken.
  • * Multiplikation. Tar a och b från stacken och lägger svaret från b*a på stacken.
  • / Division. Tar a och b från stacken och lägger svaret från b/a på stacken.
  • % Rest. Tar a och b från stacken och lägger resten från b/a på stacken.
  • ! Negation. Ta översta värdet från stacken, om det är 0, läggs 1 på stacken, annars 0.
  • ^ Börja gå uppåt.
  • v Börja gå nedåt.
  • < Börja gå åt vänster.
  • > Börja gå åt höger.
  • ? Slumpa en ny giltig riktning att gå mot.
  • | Ta översta värdet från stacken, om det är 0, gå nedåt annars uppåt.
  • _ Ta översta värdet från stacken, om det är 0, gå höger annars vänster.
  • " Tar emot en sträng. Efter " lägger programmet ASCII-värdet för alla tecken på stacken ända tills nästa ".
  • : Duplicerar värdet längst upp på stacken.
  • \ Tar a och b från stacken och lägger tillbaka dem i omvänd ordning.
  • $ Tar bort översta värdet på stacken
  • . Tar översta värdet på stacken och skriver ut det som ett heltal.
  • , Tar översta värdet på stacken och skriver ut motsvarande ASCII-tecken.
  • # Brukar kallas "trampolin"-instruktion eftersom den hoppar över nästa instruktion och fortsätter med den som ligger efter.
  • p Tar y, x och a från stacken och ändrar sedan tecknet på position x,y i programfältet till a.
  • g Tar y och x från stacken och hämtar sedan tecknet på position x,y i programfältet och lägger det längst upp på stacken.
  • & Ber användaren om ett heltal och lägger det sedan längst upp på stacken.
  • ~ Ber användaren om en bokstav och lägger sedan ASCII-värdet för tecknet längst upp på stacken.
  • @ Avslutar programmet.

Externa länkar

[redigera | redigera wikitext]