2dpl
Z Wikipedii
2dpl – 2-Dimensional Programming Language – ezoteryczny, jak go określa sam autor, język programowania, wzorowany na BeFunge.
Elementami języka są pojedyncze znaki, kodujące elementarne operacje oraz literały (stałe argumenty działań). Treść programu w 2dpl rozmieszczana jest na płaszczyźnie, w potencjalnie nieograniczonej dwuwymiarowej tablicy znaków. Wykonanie programu, to jest odczytywanie kolejnych znaków i wykonanie odpowiednich działań, może odbywać się w czterech kierunkach: poziomo, od lewej do prawej albo od prawej do lewej, oraz pionowo, z góry na dół i z dołu do góry. Cecha ta, wzorowana na BeFunge, odróżnia te języki od innych języków programowania, w których program zapisywany jest liniowo, jako ciąg znaków i symboli (w niektórych językach istotny jest podział na wiersze), i interpretowany w zasadzie w kolejności zapisu.
Dodatkową cechą, odróżniającą 2dpl od BeFunge, jest zmienna prędkość wskaźnika programu – interpreter może odczytywać każdy kolejny znak (instrukcję) programu, albo też co drugi, co trzeci, ... co n-ty. Sterowanie prędkością wskaźnika odbywa się poprzez odpowiednią konstrukcję programu (wykorzystanie instrukcji języka).
Na interpreter języka 2dpl składają się:
- opisana tablica - pamięć tekstu progamu,
- wskaźnik programu (wskazanie bieżącego punktu interpretacji),
- parametry (kierunek i prędkość) ruchu wskaźnika programu,
- stos obliczeniowy.
Główne cechy języka 2dpl:
- arytmetyka całkowitoliczbowa,
- 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Ä™ programu.
Spis treści |
[edytuj] Instrukcje
Poniższa tabela przedstawia instrukcje języka.
| Instrukcje sterujÄ…ce | |
| X | Kieruje wskaźnik w prawo. |
| x | Kieruje wskaźnik w lewo. |
| Y | Kieruje wskaźnik w dół. |
| y | 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 X jeśli liczbą tą było 0, albo jak x w przeciwnym razie. |
| | | Warunkowa zmiana kierunku na pionowy: zdejmuje liczbę ze stosu i działa jak Y jeśli liczbą tą było 0, albo jak y w przeciwnym razie. |
| Instrukcje obliczeniowe | |
| 0...9 | Wkłada liczbę (jednocyfrową) na stos. |
| " | Wkłada na stos kolejne napotykane znaki aż do ponownego napotkania znaku ". |
| + | 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). |
| : | Powiela daną na szczycie stosu, wkładając na stos drugą jej kopię. |
| \ | 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 | |
| . | 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] Ruch wskaźnika
Instrukcje X, x, Y i y ustalają nowy kierunek ruchu wskaźnika programu (kierunek interpretacji kolejnych instrukcji). Jeśli przy tym interpreter napotka jedną z tych instrukcji podczas ruchu zgodnego z określanym przez instrukcję, to prędkość wskaźnika zwiększa się o jeden. Jeśli zaś aktualny kierunek interpretacji jest przeciwny do określanego przez napotkaną instrukcję, a prędkość wskaźnika jest większa od 1, to kierunek nie ulega odwróceniu, a tylko zmniejsza się prędkość.
Ta sama reguła odnosi się do instrukcji ? – z tym zastrzeżeniem, że bieżący kierunek ruchu wkaźnika porównuje się do wylosowanego przez instrukcję nowego kierunku.
[edytuj] Przykład
Ten program wypisuje "Hello World!"
X Y @,,,,,,,,,,,,"Hello World!"x
[edytuj] Podobne języki
[edytuj] Linki zewnętrzne
- Oficjalna strona (opis) 2dpl, i ta sama strona pod alternatywnÄ… nazwÄ….
- Plik do pobrania – interpreter języka 2dpl (pod Windows) i jego źródło.
| "Rozgrywającym ws. ustawy medialnej była lewica" |
|
Platforma Obywatelska prowadziła arogancką politykę w zakresie ustawy medialnej w stosunku do SLD - twierdzi poseł niezrzeszony Maciej Płażyński.
|
| Lubelskie: pogotowie przeciwpowodziowe |
|
Wisła w Annopolu (Lubelskie) przekroczyła po południu stan alarmowy o 4 cm. W niżej położonych Puławach, poziom wody w rzece zbliżył się do stanu ostrzegawczego.
|
| Lepper o Sejmie: to żenujące, kompromitacja |
|
Andrzej Lepper, przewodniczący Samoobrony oświadczył w Olsztynie, że to, co dzieje się w Sejmie "jest żenujące", a "kłótnia między rządem, a pałacem prezydenckim kompromituje Polskę w oczach świata".
|
| "Nie prowadzimy nagonki na Kurskiego i Wassermanna" |
|
"Gazeta Wyborcza" nie prowadzi nagonki na posłów PiS Jacka Kurskiego i Zbigniewa Wassermanna. Wydaje się, że wyroki w procesach między "Gazetą" a nimi były sprawiedliwe - uważa z-ca redaktora naczelnego "Gazety" Piotr Pacewicz.
|
| Pierwsza ofiara powodzi na Podkarpaciu |
|
35-letni mieszkaniec Jabłonki w powiecie brzozowskim jest prawdopodobnie pierwszą ofiarą powodzi na Podkarpaciu. Ciało Grzegorza P. wyłowiono po południu z potoku Dydnianka, który wpada do Sanu.
|