INTERCAL – ezoteryczny język programowania
INTERCAL, oficjalnie znany jako CLWNPA (Compiler Language With No Pronounceable Acronym), jest jednym z pierwszych ezoterycznych języków programowania. Jego składnia jest celowo skomplikowana, co ma na celu utrudnienie pisania programów i zniekształcenie ich czytelności.
Charakterystyka
INTERCAL charakteryzuje się unikalnymi cechami:
- Uprzejmość: Instrukcje muszą być poprzedzone słowem kluczowym
PLEASE
, a ich nadużycie skutkuje uznaniem programu za zbyt lizusowskiego. - Skok z etykiety: Instrukcja
COME FROM
działa w przeciwnym kierunku niż standardowe skoki. - Grupowanie wyrażeń: Używa znaków ” i ’, co utrudnia czytelność.
- Brak jawnych procedur: Tylko instrukcja
NEXT
realizuje skoki do etykiet. - Niepewność wykonania: Komendy mogą być wykonane z różnym stopniem pewności, np. „%80”.
- Ignorowanie instrukcji: Instrukcje mogą być ignorowane przez odpowiednie komendy.
- Brak zmiennych lokalnych: Mechanizm ramek stosu jest używany zamiast zmiennych lokalnych.
- Reprezentacja liczb: Liczby są wyświetlane w systemie rzymskim.
Specyfikacja języka jest napisana w humorystyczny sposób, zawierając paradoksalne i zabawne zdania oraz autorskie nazewnictwo dla znaków ASCII.
Operatory
INTERCAL wprowadza unikalne operatory:
- Mingle (lub interleave) ($): Przeplatanie bitów dwóch argumentów.
- Select (~): Wybiera bity z pierwszego argumentu na podstawie ustawień w drugim.
Posiada także trzy jednoargumentowe operatory: AND, OR, EXOR, które operują na parach bitów.
Zupełność
Mimo swojej złożoności, INTERCAL jest językiem zupełnym w sensie Turinga, co oznacza, że może rozwiązywać dowolne problemy algorytmiczne, chociaż czas wykonania jest znacznie dłuższy niż w tradycyjnych językach programowania.
Przykład: Hello World
Program „Hello, world!” w INTERCAL wygląda następująco:
DO ,1 <- #13 PLEASE DO ,1SUB#1 <- #234 DO ,1SUB#2 <- #112 DO ,1SUB#3 <- #112 DO ,1SUB#4 <- #0 DO ,1SUB#5 <- #64 DO ,1SUB#6 <- #194 DO ,1SUB#7 <- #48 PLEASE DO ,1SUB#8 <- #22 DO ,1SUB#9 <- #248 DO ,1SUB#10 <- #168 DO ,1SUB#11 <- #24 DO ,1SUB#12 <- #16 DO ,1SUB#13 <- #214 PLEASE READ OUT ,1 PLEASE GIVE UP
Kategoria
Kategoria: Ezoteryczne języki programowania