**Intercal** je programovací jazyk, ktorý ma za cieľ vyzerať úplne inak ako akýkoľvek iný jazyk.

História
--------

Jazyk Intercal bol navrhnutý skoro ráno 26. Mája 1972 Donald R. Woodsom a James M. Lyonom na Princetonskej univerzite. Približne osemnásť rokov neskôr Eric S. Raymond vytvoril implementáciu C-INTERCAL, ktorá je odvtedy udržiavaná komunitou masochistov.

Celé meno jazyka znie "Compiler Language With No Pronounceable Acronym" (počítačový jazyk bez vysloviteľnej skratky).

Opis jazyka
-----------

### Premenné

Intercal pozná dva typy premenných – 16bitové a 32bitové neznamienkové celé čísla. Premenné nemajú meno, ale číslo (1..65535), pred ktorým sa píše fľak (.) ak ide o 16bitovú premmenú alebo dvojfľak (:) pre 32bitové premmenné. Rovnako označené 16 a 32bitové premenné sú dve rôzne hodnoty.

### Konštanty

Konštanta je 16bitová hodnota od 0 do 65535 pred ktorou sa píše mreža (#).

### Polia

Polia pre 16bitové hodnoty su označené chvostíkom (,) a pre 32bitové hodnoty hybridom (;) nasledované číslom od 1 po 65535. Potom nasleduje slovo **SUB** nasledované indexami pola oddelenými medzerami. index môže byť ľubovoľný výraz.

Všimnime si, že .123, :123, #123, ,123, a ;123 sú úplne odlišné výrazy.

### Operátory

Jazyk pozná 5 operátorov. 2 binárne a 3 unárne. Prosím, budťe k nim milí: Nie sú veľmi múdre ale sú všetko čo máme

Binárne operátory:

* spojiť (interleave) – označovaný sko veľké prachy ($). Vezme dva 16-bitové operandy a výsledok vytvorí striedaním ich bitov. Napríklad #65536$#0 je v binárnej sústave 101010....10 a #0$#65536 je 010101...01

* vybrať (select) – označovaný ako sínusoida (~), vyberá tie bity s prvého operandu, kde má druhý operand jednotky a vracia ich vo výsledku natlačené na pravej strane. Pred prevedením tejto operácie sú obidva operandy rozšírené na 32bitov. Napríklad #179~#201 (binárne 10110011~11001001) vyberá 8. 7. 4. a 1. bit prvého argumetu, čo je 1001 = 9.

Unárne operátory:

* & – logický AND
* V – logický OR
* ? – logický XOR

Unárne operátory sa vkladajú medzi fľak, dvojfľak, chvostík alebo čokoľvek čo je pred operandom a číslo. Naraz môže byť požitý najviac jeden unárny operátor. Tieto operátory fungujú na všetkých dvojiciach po sebe idúcich bitov a výsledok z prvého a posledného bitu ide do prvého bitu výsledku. Napríklad #&77 (binárne = 1001101) je binárne 0000000000000100 = 4, #V77 je binárne 1000000001101111 = 32879 a #?77 je binárne 1000000001101011 = 32875.

### Priorita operátorov

Žiadna neexistuje. Napriek tomu môžeme výrazy uzatvárať medzi iskričky (') alebo zajačie uši ("). Čiže '#165c./#203'~#358 (bnárne '10100101c./11001011'~101100110) je 15, ale #165c./'#203~#358' je 34915 a #165c./#203~#358 je nesprávna syntax bez hodnoty. Unárny operátor je požitý na celý výraz, keď je vložený hneď pred prvú iskričku alebo ucho.

### Príkazy

Príkaz obsahuje:

* nepovinné návestie uzavreté v ()
* slovo PLEASE, DO alebo PLEASE DO. Z týchto slov si môžeme voľne vybrať a zvýšiť tak estetickosť nášho programu
* nepovinné slovo NOT alebo N'T
* nepovinné číslo od 0 do 100 pred ktorým je dve-nuly-sedem (%) udávajúce pravdepodobnosť v percentách že príkaz bude vykonaný
* samotný príkaz

#### Zoznam príkazov

* (návestie) NEXT
* FORGET
* RESUME
* STASH
* IGNORE
* REMEMBER
* ABSTAIN
* REINSTATE
* WRITE IN
* READ OUT
* GIVE UP
* ...

Niekedy po roku 1984 bol v do Intercal-u pridaný príkaz COME FROM.[1]

Jeho použitie vyzerá takto:

```
(1)     DO <any statement>
        .
        .
        .
(2)     DO COME FROM (1)

```

a má rovnaký zmysel ako nasledovný kód:

```
(1)     DO <any statement>
(2)     DO GOTO (3)
        .
        .
        .
(3)     DO NOTHING

```

Referencie
----------

1. ↑

Externé odkazy
--------------

* stránka venovaná intercalu