# Karel

Karel è un linguaggio di programmazione concepito per rispondere a esigenze didattiche ed educative, quale strumento introduttivo alla programmazione rivolto a principianti.
Il linguaggio è stato creato nel 1981 da Richard E. Pattis che ne definì le caratteristiche nel suo libro Karel The Robot: A Gentle Introduction to the Art of Programming e ne fece uso nei suoi corsi introduttivi alla Stanford University. Prende il nome da Karel Čapek, lo scrittore ceco che introdusse il termine robot.

## Principi basilari

Un programma in Karel è usato per controllare il comportamento di un semplice automa, visualizzato sullo schermo come un piccolo robot di nome Karel. Il robot si muove e agisce in un ambiente che consiste in una semplice griglia di street (strade), orientate orizzontalmente, e avenue (viali), con orientazione verticale.
Karel obbedisce a 5 istruzioni base:
* move (Karel si sposta di un quadratino lungo la direzione e il verso in cui è orientato);
* turnleft (Karel ruota il suo orientamento di 90 ° a sinistra)
* putbeeper (Karel deposita un beeper (cicalino) sul quadrato su cui si trova)
* pickbeeper (Karel toglie un beeper dal quadrato in cui si trova)
* turnoff (Karel si spegne e il programma termina).
Karel può anche eseguire test booleani sull'ambiente circostante, restituendo informazioni come la presenza di un beeper nella posizione attualmente occupata, la presenza di ostacoli nelle vicinanze, la direzione verso la quale il robot è rivolto in quel momento. Il programmatore può creare istruzioni addizionali definendole in termini delle cinque istruzioni di base, usando istruzioni per il controllo del flusso if e while in combinazione con interrogazioni sull'ambiente e usando il costrutto iterate.

### Esempio

Quello che segue è un esempio della sintassi di Karel in un semplice programma completo (il simbolo ";" marca il termine dell'istruzione, e può essere omesso quando l'istruzione è seguita da un END. Le maiuscole non sono necessarie: la compilazione è case insensitive). All'inizio del codice vi è la definizione di una subroutine turnright, ottenuta dall'iterazione del comando bas turnleft. La subroutine è utilizzata poi nel corpo del programma, delimitato da BEGINNING-OF-EXECUTION/END-OF-EXECUTION:

## Varianti e discendenti

Il linguaggio ha ispirato la creazione e lo sviluppo di vari cloni o di linguaggi affini, sempre per scopi educativi. Poiché il linguaggio è destinato a principianti, ne esistono varianti locali in alcuni idiomi, tra cui la lingua ceca (Karel ha goduto di una certa popolarità in Cecoslovacchia). La versione slovacca, chiamata Robot Karol++, contiene ulteriori miglioramenti ed è stato a sua volta tradotto in inglese, tedesco e ceco.

### Versioni orientate agli oggetti

I principi base di Karel sono stati aggiornati al paradigma della programmazione orientata agli oggetti in un nuovo linguaggio chiamato Karel++. Da un punto di vista concettuale, Karel++ si fonda su Karel, ma usa una sintassi completamente nuova, simile a quella di Java.

### rbKarel

rbKarel è una implementazione di Karel in REALbasic: rbKarel offre i comandi basilari di Karel in un ambiente RBScript con uso della sintassi BASIC per cicli e condizionali. Questo progetto didattico fornice una interfaccia grafica utente multipiattaforma per esperimenti Karel tra cui single-stepping e emissione vocale.

### Robot Emil

Nel 2008 è apparso Educational program Robot Emil una variante in 3D di Robot Karel. Robot Emil agisce in una stanza con tre dimensioni, mostrata attraverso una veduta di tipo fotocamera, così che si aggiungono interessanti caratteristiche, come la possibilità di guardare la scena da diverse angolazioni e distanze, è possibile ruotare la prospettiva, guardare l'attività del robot nei dettagli, ecc. Il Robot può posizionare mattoni di forma e colori a scelta, dipingere le pareti e il pavimento con colori a mosaico, creare porte e tunnel attraverso i muri costruiti con i mattoni, può aprire finestre (usando mattoni trasparenti), può costruire il soffitto (usando mattoni a forma di tetto), erba, sentieri, laghetti (dipingendo le mattonelle. Questa implementazione mette a disposizione un'ampia scelta di mezzi per stimolare la creatività infantile, agevolando il loro pensiero algoritmico e l'immaginazione spaziale, insegnandogli al contempo le basi della programmazione.
La versione originale è in slovacco, ma dal 2009 ne esistono versioni in ceco e in inglese.

### FANUC Karel

Nonostante l'omonimia, FANUC Karel non ha alcuna relazione con Karel: si tratta, in questo caso, di un linguaggio proprietario nato in ambito industriale. Il linguaggio non deriva da Karel ma direttamente dal Pascal, ed è dedicato alla programmazione dei robot commerciali prodotti dalla FANUC Robotics.