BeFunge – Wiki

BeFunge

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji , szukaj

BeFungeezoteryczny język programowania . Programy w nim, w odróżnieniu od większości języków programowania , są zorganizowane w dwuwymiarowej tablicy. Instrukcje "strzałkowe" ( < > ^ v ) powodują przeniesienia sterowania, a pętle są tworzone poprzez zorganizowanie sterowania "w kółko". Każda instrukcja w BeFunge jest oznaczana pojedynczym znakiem.

W języku BeFunge program wykonuje się czytając instrukcje poruszając się po dwuwymiarowym obszarze. Zatem "licznik programu" składa się z dwóch liczb, oznaczających współrzędne na tablicy programu. Natomiast do przenoszenia i przechowywania wszelkich danych służy stos (obsługiwany zresztą na podobnych zasadach co w językach Forth i False ).

Spis treści

[ edytuj ] Kompilatory BeFunge

Autorem BeFunge jest Chris Pressey, który stworzył ten język w 1993, w zamierzeniu jako język o niezwykle trudnym do napisania kompilatorze . W jednym z komentarzy było nawet napisane, że kompilatora takiego nie dałoby się w ogóle napisać, bo musiałby on posiadać sztuczną inteligencję [ potrzebne źródło ], jednak udało się napisać kilka kompilatorów do tego języka.

Poza kompilatorami dla BeFunge-93 istnieją też kompilatory z odpowiednimi rozszerzeniami. Wartym uwagi jest Funge-98, w którym programy można organizować w przestrzeniach dowolnego wymiaru (dla 1 Unifunge, dla 2 BeFunge, dla 3 TreFunge itd.), a nawet posiada programowanie wielowątkowe , czyli w całej przestrzeni może być więcej niż jeden "licznik programu". Tego typu rozszerzenia są zwane Fungeoidami.

[ edytuj ] Główne cechy języka Befunge

  • interaktywność – język ma wbudowaną prostą operację wejścia, umożliwiającą zapytanie użytkownika o daną (znak lub liczbę),
  • brak symboli – język nie definiuje symboli, w szczególności nie ma w nim możliwości deklarowania stałych, zmiennych i podprogramów,
  • mechanizm samomodyfikowania się progamu.

[ edytuj ] Instrukcje

Instrukcje, podobnie jak w języku Forth operują wyłącznie na stosie, tzn. argumenty operacji są zbierane ze stosu, wynik operacji jest odrzucany na stos.

Instrukcje sterujące
> Kieruje wskaźnik w prawo.
< Kieruje wskaźnik w lewo.
v Kieruje wskaźnik w dół.
^ Kieruje wskaźnik do góry.
 ? Ustawia losowy kierunek dalszej interpretacji.
# Przeskakuje następną instrukcję.
@ Zatrzymuje interpretację (kończy program).
Instrukcje sterujące warunkowe
_ Warunkowa zmiana kierunku na poziomy: zdejmuje liczbę ze stosu i działa jak > jeśli liczbą tą było 0, albo jak < w przeciwnym razie.
| Warunkowa zmiana kierunku na pionowy: zdejmuje liczbę ze stosu i działa jak v jeśli liczbą tą było 0, albo jak ^ w przeciwnym razie.
Instrukcje obliczeniowe
+ Dodawanie (zdejmuje dwie liczby ze szczytu stosu i wkłada ich sumę na stos).
Odejmowanie (zdejmuje dwie liczby i wkłada ich różnicę).
* Mnożenie (zdejmuje dwie liczby i wkłada ich iloczyn).
/ Dzielenie (zdejmuje dwie liczby i wkłada ich iloraz).
 % Modulo (zdejmuje dwie liczby i wkłada resztę z ich dzielenia).
 ! Negacja logiczna (jeśli liczbą na szczycie stosu jest 0, zastępuje ją liczbą 1, w przeciwnym razie zastępuje ją liczbą 0).
` Porównanie "większe" (zdejmuje dwie liczby i wkłada 1, jeśli pierwsza była większa, albo 0 w przeciwnym razie).
 : Podwaja liczbę na szczycie stosu.
\ Zamienia kolejność dwu najwyższych danych (znajdujących się na szczycie stosu).
$ Zdejmuje daną ze szczytu stosu i odrzuca (ignoruje) ją.
Operacje wejścia i wyjścia
0...9 Wkłada liczbę (jednocyfrową) na stos.
" Wkłada na stos kolejne napotykane znaki aż do ponownego napotkania znaku ".
. Zdejmuje daną ze szczytu stosu i wypisuje na wyjście (ekran) jako liczbę.
, Zdejmuje daną ze szczytu stosu i wypisuje na wyjście (ekran) jako znak.
& Pyta użytkownika o liczbę i wkłada ją na szczyt stosu.
~ Pyta użytkownika o znak i wkłada go na szczyt stosu.
Manipulacje na treści programu
g Zdejmuje ze stosu dwie liczby, i używając ich jako współrzędnych do tablicy programu odczytuje znak z treści programu i umieszcza go na stosie.
p Zdejmuje ze stosu dwie liczby oraz znak, i uzywając tych liczb jako współrzędnych do tablicy programu umieszcza znak w treści progamu.

[ edytuj ] Przykłady

Program, który liczy liczby losowe:

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

Program wyświetlający "Hello world!":

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

Merkel spieszy na ratunek niemieckiej rewolucji energetycznej
Realizacja nowej niemieckiej strategii energetycznej to "herkulesowe zadanie" - przyznała w środę kanclerz Angela Merkel po rozmowie z premierami 16 landów Niemiec na temat kłopotów z wdrażaniem planów rezygnacji z atomu i przejścia na energię odnawialną.



Syria: Sankcje kosztowały kraj około 4 mld dolarów
Syryjski minister ds. ropy naftowej Sufian Alaw przyznał w środę, że surowe międzynarodowe sankcje wobec sektora paliwowego Syrii kosztowały kraj około 4 mld dolarów. Chodzi o zastosowane we wrześniu 2011 roku embargo na syryjską ropę naftową.



Brazylia: Pilotka wyprosiła z samolotu pasażera za seksistowskie uwagi
Pilotka brazylijskich linii lotniczych TRIP wyprosiła z samolotu przed startem pasażera. Mężczyzna głośno wypowiadał seksistowskie uwagi, kiedy dowiedział się, że samolotem pokieruje kobieta.



Premier Tusk przyleciał na szczyt UE do Brukseli
Premier Donald Tusk przybył do Brukseli na nieformalny szczyt UE, na którym przywódcy mają rozmawiać o wsparciu wzrostu i zatrudnienia. Wcześniej premier spotka się z prezydentem Francji Francois Hollande'em oraz przewodniczącym PE Martinem Schulzem.



Trzęsienie ziemi we Włoszech. Ludzie proszą o dach nad głową
Około 6 tys. mieszkańców regionu Emilia-Romania, na północy Włoch, zwróciło się po niedzielnym trzęsieniu ziemi z prośbą o zapewnienie miejsc w miasteczkach namiotowych i ośrodkach noclegowych - poinformowały miejscowe władze.



Home Page , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,