Have you ever heard of INTERCAL? If you haven’t, don’t feel bad. This relatively obscure language dates back to 1972 with the goal of being difficult to read and write. It is the intellectual parent of systems like brainf**k and other bad languages. Now, you can read the INTERCAL-72 source code thanks to a found printout. It will help if you can read SPITBOL, another obscure language that is a compiled version of SNOBOL (which is like an old-fashioned non-Unix awk program).
How strange it INTERCAL? Well, one of the statements is PLEASE. If you don’t use it enough, you’ll offend the interpreter, who will then ignore your program. But if you use it too much, then you are a suck up and, therefore, your program will be ignored again. If you think GOTO is a bad idea, you’ll just hate COME FROM, although that was from a later version of INTERCAL.
Here’s the example program from the user’s manual:
1 DO (5) NEXT 2 (5) DO FORGET #1 3 PLEASE WRITE IN :1 4 DO .1 <- ’V-":1~’#32768c/#0’"c/#1’~#3 5 DO (1) NEXT 6 DO :1 <- "’V-":1~’#65535c/#0’"c/#65535’ 7 ~’#0c/#65535’"c/"’V-":1~’#0c/#65535’" c 8 /#65535’~’#0c/#65535’" 9 DO :2 <- #1 10 PLEASE DO (4) NEXT 11 (4) DO FORGET #1 12 DO .1 <- "V-’:1~:2’c/#1"~#3 13 DO :1 <- "’V-":1~’#65535c/#0’"c/":2~’#65535 1 c 14 /#0’"’~’#0c/#65535’"c/"’V-":1~’#0 c 15 /#65535’"c/":2~’#0c/#65535’"’~’#0c/#65535’" 16 DO (1) NEXT 17 DO :2 <- ":2~’#0c/#65535’" c 18 /"’":2~’#65535c/#0’"c/#0’~’#32767c/#1’" 19 DO (4) NEXT 20 (2) DO RESUME .1 21 (1) PLEASE DO (2) NEXT 22 PLEASE FORGET #1 23 DO READ OUT :1 24 PLEASE DO .1 <- ’V-"’:1~:1’~#1"c/#1’~#3 25 DO (3) NEXT 26 PLEASE DO (5) NEXT 27 (3) DO (2) NEXT 28 PLEASE GIVE UP
Interestingly, you can get SPITBOL for modern systems, so it is entirely possible to run this version of INTERCAL on a modern machine. Why? That’s for you to answer.
The heart of it all is on GitHub. You’ll also find links to the manual should you attempt to use it. We’ve looked at INTERCAL and other similar languages before. However, you are free to write unreadable code in a more conventional language.
No “THANK YOU” statement to end the programme run?
Maybe it uses the F-variant, said in Van Darkholme’s melodic voice.
I didn’t know interracial compilers were legal in 1972!
Sigmund Freud would like a word with you and a copy of your browser history
Please HAL, please………..
Handle pulls…… whoosh down the interdimensional toilet bowl.
Starting to sound familiar.
Snowbowl was a brand of toilet cleaner.
COME FROM … AWAY???
Ah yes, the famous song from Styx.
Is there a FORCE, APOLOGIZE or REGRET statement?
A good example of how you should NOT design a programming language.
It’s more consistent or consequent than C++ though. ;)
Haha :-D Indeed.
“28 PLEASE GIVE UP”
That is the only thing that is easy AND readable to me.
And i already do it all the time!
“…being difficult to read and write…”
Compared to APL, which requires a special keyboard because of its arcane characters (AND a specialized monitor for display), this language is a breeze; a ‘walk in the park’.
Naw, you could do APL on an ADM3A.
.ro for rho, ^ for take, .da for drop, .so for jot dot, …
Assuming you spent enough time with the language, the documentation, and the non-APL keyboard to become somewhat proficient at memorizing and utilizing the proper keystroke substitutions…
how does one “do” APL without an ‘APL-aware’ monitor?
Didn’t realize the ADM3A was that smart.
The escapes were the same on the way out (on the screen) as they were on the way in (through the keyboard): the ADM3A didn’t have to be smart to do that.
Rho, rho, rho of X
Always equals 1
Rho is dimension
Rho rho rank
APL is fun!
Sean Hess over at the Advent of Computing Podcast has an indepth view of the INTERCAL 73 compiler in the latest episode of the Podcast. Mainly because he is the main force behind getting it running on more modern machnes.
I think you’re missing out by not explaining the meaning of INTERCAL’s name, btw. For those wondering, it stands for Compiler Language With No Pronounceable Acronym, of course.