Zum Inhalt springen

INTERCAL

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 7. Januar 2003 um 17:30 Uhr durch Kurt Jansson (Diskussion | Beiträge) (von Intercal kopiert). Sie kann sich erheblich von der aktuellen Version unterscheiden.


INTERCAL ist eine Programmiersprache, die am 26. Mai 1972 von Donald R. Woods und James M. Lyon entwickelt wurde. Erst 1990 wurde eine erste UNIX-Implementation von Eric S. Raymond programmiert, und heute ist INTERCAL auch auf DOS verfügbar.

INTERCAL wurde mit dem Ziel entwickelt, das Programmieren schwierig zu gestalten, und die entstehenden Programme effektiv unlesbar zu machen. Insofern ähnelt INTERCAL keiner der bekannten Programmiersprachen, hat sehr wenige Sprachkonstrukte, und sollte leicht zu erlernen sein. Besonders berühmt ist der "ComeFrom" Befehl, der invers an den "GOTO" Befehl vieler Programmiersprachen angelehnt ist.

INTERCAL wird von einer kleinen Fan-Gemeinde gepflegt, und kann dem interessierten Programmierer zur Erheiterung oder Rätsellösung dienen.


Beispiel ROT13-Programm

  • (10) PLEASE DON'T GIVE UP
  • (1) DO .2 <- '?.1$#64'~'#0$#65535'
  • DO .2 <- '&"'.1~.2'~'"?'?.2~.2'$#32768"~"#0$#65535"'"$".2~.2"'~#1
  • DO .3 <- '?#91$.1'~'#0$#65535'
  • DO .3 <- '&"'#91~.3'~'"?'?.3~.3'$#32768"~"#0$#65535"'"$".3~.3"'~#1
  • DO (11) NEXT
  • DO (2) NEXT
  • DO (12) NEXT
  • (11) DO (13) NEXT
  • PLEASE FORGET #1
  • DO (12) NEXT
  • (13) DO (14) NEXT
  • PLEASE FORGET #2
  • DO (12) NEXT
  • (14) DO STASH .1
  • DO .1 <- .3
  • DO (1000) NEXT
  • DO .1 <- .3
  • DO .2 <- #1
  • PLEASE DO (1000) NEXT
  • DO RETRIEVE .1
  • PLEASE RESUME .3
  • (12) PLEASE FORGET #1
  • DO .2 <- '?.1$#96'~'#0$#65535'
  • DO .2 <- '&"'.1~.2'~'"?'?.2~.2'$#32768"~"#0$#65535"'"$".2~.2"'~#1
  • DO .3 <- '?#123$.1'~'#0$#65535'
  • DO .3 <- '&"'#123~.3'~'"?'?.3~.3'$#32768"~"#0$#65535"'"$".3~.3"'~#1
  • PLEASE DO (15) NEXT
  • PLEASE DO (3) NEXT
  • DO (16) NEXT
  • (15) DO (17) NEXT
  • PLEASE FORGET #1
  • DO (16) NEXT
  • (17) DO (18) NEXT
  • PLEASE FORGET #2
  • DO (16) NEXT
  • (18) PLEASE STASH .1
  • DO .1 <- .3
  • DO (1000) NEXT
  • DO .1 <- .3
  • DO .2 <- #1
  • DO (1000) NEXT
  • PLEASE RETRIEVE .1
  • PLEASE RESUME .3
  • (16) PLEASE FORGET #1
  • DO RESUME #1
  • (2) DO .2 <- #65
  • DO (1010) NEXT
  • PLEASE .1 <- .3
  • PLEASE .2 <- #13
  • DO (1000) NEXT
  • DO STASH .3
  • DO .1 <- .3
  • DO .2 <- #26
  • DO (1040) NEXT
  • DO .1 <- .3
  • DO (1030) NEXT
  • DO .2 <- .3
  • DO RETRIEVE .3
  • DO .1 <- .3
  • DO (1010) NEXT
  • DO .1 <- .3
  • DO .2 <- #65
  • DO (1000) NEXT
  • DO .1 <- .3
  • DO RESUME #1
  • (3) DO .2 <- #97
  • DO (1010) NEXT
  • DO .1 <- .3
  • DO .2 <- #13
  • DO (1000) NEXT
  • DO STASH .3
  • DO .1 <- .3
  • DO .2 <- #26
  • DO (1040) NEXT
  • DO .1 <- .3
  • DO (1030) NEXT
  • DO .2 <- .3
  • DO RETRIEVE .3
  • DO .1 <- .3
  • DO (1010) NEXT
  • DO .1 <- .3
  • DO .2 <- #97
  • DO (1000) NEXT
  • DO .1 <- .3
  • DO RESUME #1
  • DO COME FROM (10)
  • DO .4 <- #0
  • DO .5 <- #0
  • DO STASH .4 + .5
  • DO ,1 <- #1
  • DO COME FROM (33)
  • DO WRITE IN ,1
  • DO .1 <- ,1 SUB #1
  • DO (31) NEXT
  • PLEASE DO .6 <- #1
  • PLEASE DO (34) NEXT
  • (32) PLEASE RESUME '?.1$#256'~'#256$#256'
  • (31) DO (32) NEXT
  • DO FORGET #1
  • DO .6 <- #0
  • PLEASE DO (34) NEXT
  • (33) DON'T GIVE UP
  • (34) DO .6 <- "?!6'$#1"~#3
  • DO (40) NEXT
  • DO GIVE UP
  • (40) DO (41) NEXT
  • PLEASE FORGET #1
  • DO (42) NEXT
  • (41) DO RESUME .6
  • (42) DO FORGET #1
  • DO RETRIEVE .4
  • DO .2 <- .4
  • DO (1000) NEXT
  • DO .4 <- .3~#255
  • DO .3 <- .4
  • DO STASH .4
  • DO .1 <- .3
  • DO (1) NEXT
  • DO .3 <- !1~#15'$!1~#240'
  • DO .3 <- !3~#15'$!3~#240'
  • DO .2 <- !3~#15'$!3~#240'
  • DO .1 <- .5
  • DO (1010) NEXT
  • DO .5 <- .2
  • DO ,1 SUB #1 <- .3
  • PLEASE READ OUT ,1
  • PLEASE RESUME #1


Sprach-Seite mit Impementation und Manual (auf englisch)
c2.com - Wiki zum ComeFrom Befehl