# INTERCAL

INTERCAL, uma linguagem de programação paródia, é a linguagem de programação esotérica canônica, criada por Don Woods e James Lyon, dois estudantes da Universidade de Princeton, em 1972. Ela satiriza aspectos das linguagens de programação FORTRAN e COBOL, assim como a proliferação de construtores e notações de linguagem propostos nos anos 1960. Conseqüentemente, o humor pode aparecer um pouco ultrapassado para os programadores modernos acostumados a C ou Java.
A versão atual, C-INTERCAL, é mantida por Eric S. Raymond.
Os autores originais dizem que INTERCAL significa "Compiler Language With No Pronounceable Acronym" (Compilador de Linguagem Sem Acrônimo Pronunciável).
A INTERCAL é propositadamente diferente de todas as outras linguagens de computador. Operações comuns em outras linguagens são realizadas com sintaxe redundade e secreta. Do manual de referência da INTERCAL:
O manual de referência da INTERCAL é um trabalho de humor, contendo várias instruções paradoxais, absurdas ou então humorísticas:
Ele possui uma "amígdala", como explicado nesta nota de rodapé: "4) Já que todos os outros manuais de referência possuem apêndices, foi decidido que o manual INTERCAL deve conter algum outro tipo de órgão removível."
A INTERCAL possui várias outras características projetadas para fazê-la ainda mais inestéticamente desagradável para o programador: ela usa instruções como "READ OUT", "IGNORE" (ignorar), "FORGET" (esquecer) e "PLEASE" (por favor). O manual da INTERCAL dá nomes incomuns para todos os caracteres ASCII não-alfanuméricos: aspas simples e duplas são "faíscas" e "orelhas de coelho" respectivamente. A exceção é o ampersand (&): como o define o Jargon File, "o que poderia ser mais estúpido?". O operador de atribuição, representado como "meia malha" ou sinal de igual em várias outras linguagens de programação, é na INTERCAL um "←", referido como "pega" e feito por um "ângulo" e um "verme".
A implementação original de Princeton utilizava cartões perfurados e a codificação de caracteres EBCDIC. A fim de se permitir que a INTERCAL fosse executada em computadores usando ASCII, substituições para dois caracteres foram feitas: ¢ foi substituído por $ como operador mingle para "representar o crescente custo do software em relação ao do hardware", e ∀ foi substituído por ? como o operador unário ou-exclusivo para "expressar corretamente a reação comum de uma pessoa ao encontrar o ou-exclusivo pela primeira vez".
Apesar de ser intencionalmente obtusa e palavrosa, a INTERCAL é contudo Turing completa: dada memória suficiente, a INTERCAL pode resolver qualquer problema que uma máquina de Turing universal pode. Porém, o faz bem lentamente. Um modelo do Crivo de Eratóstenes, computando todos os números primos menores que 65536, foi testado em um Sun SPARCStation-1. Em C, demorou menos de 0,5 segundo. O mesmo programa em INTERCAL demorou mais de dezessete horas. (Stross, 1992)
Deve-se notar que quase nenhuma linguagem de programação permite horrores notacionais tanto quanto ou mais que a INTERCAL, como demonstrado em disputas como o International Obfuscated C Code Contest (Concurso Internacional de Código C Ofuscado). Porém, estes geralmente são esforços intencionais para se criar códigos ilegíveis, em contraste ao projeto da INTERCAL, que força praticamente todo código a ser ilegível.
De acordo com o manual da INTERCAL, "o objetivo ao se projetar a INTERCAL era não ter precedentes", supostamente nem em características de controle de fluxo, nem em operadores de manipulação de dados. Os projetistas foram parcialmente bem-sucedidos; o único precedente conhecido é uma instrução de máquina em um computador mainframe soviético BESM-6, lançado em 1967, que é efetivamente equivalente ao operador SELECT da INTERCAL.

## Dialetos

A INTERCAL original era muito limitada pelas suas capacidades de entrada/saída: a única entrada aceita era números, e a única saída era uma versão estendida dos numerais romanos.
A reimplementação C-INTERCAL, estando disponível na internet, tornou a linguagem mais popular entre os devotados a linguagens de programação esotéricas. O dialeto C-INTERCAL possui algumas diferenças em relação ao INTERCAL original e introduziu algumas características novas, como a instrução COME FROM e meios para se realizar operações de E/S com texto baseado no modelo de texto Turing.
Os autores da C-INTERCAL também criaram a variante TriINTERCAL, baseada no sistema ternário e generalizando o conjunto de operadores da INTERCAL.
Uma variante mais recente é a Threaded INTERCAL, que estende a funcionalidade do COME FROM para suportar multitarefa.

## Olá, mundo

O tradicional programa olá mundo demonstra como a INTERCAL é diferente das linguagens de programação padrões. Em C, ele poderia ser lido como:
Em outras linguagens pode ser até mais simples, como neste exemplo em Python:
O programa equivalente em C-INTERCAL é maior e mais difícil para ler: