The full name of the compiler is "Compiler Language With No Pronounceable Acronym", which is, for obvious reasons, abbreviated "INTERCAL".
(בתרגום חופשי: השם המלא של המהדר הוא "שפת מהדר חסרת קיצור שניתן להגות אותו", אשר, מסיבות ברורות, מקוצר ל-"INTERCAL".)
קיימות 2 גרסאות של INTERCAL: C-INTERCAL (בעבר תוחזק על ידי אריק ריימונד), ו-CLC-INTERCAL (מתוחזק על ידי קלאודיו קאלבלי).
מבוא
INTERCAL תוכננה להיות שונה לגמרי מכל שפת תכנות אחרת. ל-INTERCAL קיימות הרבה תכונות שמתוכננות להקשות על המתכנת: היא משתמשת במשפטים כמו "READ OUT", וכן "IGNORE" וגם "FORGET" ומגדירים כמו "PLEASE". מילת המפתח האחרונה מספקת 2 סיבות לדחיית התוכנית על ידי המהדר: אם "PLEASE" לא מופיע מספיק, התוכנית מוגדרת כמנומסת באופן לא מספיק. אם "PLEASE" מופיע יותר מדי פעמים, התוכנית נדחית עקב נימוס מוגזם. אף על פי שתכונה זאת קיימת במהדר המקורי, היא לא הייתה מתועדת.
המדריך של INTERCAL נותן שמות לא רגילים לכל תווי ה-ASCII שלא אלפאנומריים (היוצא דופן הוא האמפרסנד): גרש יחיד וגרשיים הם "ניצוץ" ו-"אוזני ארנב" בהתאמה. אופרטור ההצבה, שמיוצג בשפות תכנות אחרות בסימן שווה ("חצי רשת"), מיוצג ב-INTERCAL על ידי חץ שמצביע לשמאל, ->, שנקרא "מקבל" והוא נוצר מחיבור של "זווית" ו"תולעת".
הביצוע המקורי של השפה השתמש בכרטיסים מחוררים ומערך התווים EBCDIC. כדי ש-INTERCAL יוכל לרוץ על מחשבים שמשתמשים בASCII, היה צריך לעשות תחליפים ל-2 תווים: ¢ הוחלף ב-$ בשביל אופרטור הערבוב, "מתאר את עליית המחיר של התוכנות ביחס לחומרות", וכן ∀ הוחלף ב-? לייצוג פעולת XOR יונארית, בשביל "לבטא בצורה נכונה את התגובה של האדם הממוצע כשהוא רואה בפעם הראשונה פעולת XOR".
על אף הסירבול של השפה, INTERCAL היא בכל זאת שלמה טיורינג: אם יש מספיק זיכרון, INTERCAL יכולה לפתור כל בעיה שמכונת טיורינג יכולה לפתור. אבל רוב היישומים של INTERCAL עושים זאת לאט מאוד: כמה תוכניות שמבצעות את הנפה של ארטוסתנס עד 65535 נבדקו על מחשב Sun SPARCStation-1. התוכנית שנכתבה בשפת C רצה בפחות מחצי שנייה, אותה התוכנית ב-INTERCAL רצה ביותר מ-17 שעות.
קלט ופלט
INTERCAL-72 הייתה מאוד מוגבלת ביכולות הקלט-פלט: צורת הקלט הנתמכת היחידה הייתה מספרים שבהם הספרות מאויתות, וצורת הפלט היחידה הייתה גרסה מורחבת של ספרות רומיות. ב-C-INTERCAL הוספה האפשרות לקלט ופלט מכל סוג של טקסט.
דוגמה
התוכנית הבאה, שנכתבה בגרסת C-INTERCAL, כותבת בפלט "Hello, world!":