diff interps/c-intercal/pit/unlambda.doc @ 996:859f9b4339e6

<Gregor> tar xf egobot.tar.xz
author HackBot
date Sun, 09 Dec 2012 19:30:08 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/interps/c-intercal/pit/unlambda.doc	Sun Dec 09 19:30:08 2012 +0000
@@ -0,0 +1,928 @@
+Here's a program that we found and added to the pit (with the author's
+permission). This is an Unlambda interpreter; see
+http://esolangs.org/wiki/Unlambda for more information about
+Unlambda. (This must have been a doubly difficult program to write;
+INTERCAL is known for being hard to write programs in, and Unlambda is
+in part known for being hard to write interpreters for, among its
+other claims to fame.) This should run under C-INTERCAL with no
+command-line options given, although I recommend -b, -O and -f. It's
+valid INTERCAL-72 except for Turing Tape IO and COME FROM label.
+
+What follows is the original version of the program, with the author's
+comments interspersed.
+
+# Copyright (C) 2001 Ørjan Johansen
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+        PLEASE .200 <- #8       PLEASE NOTE AMOUNT OF INITIAL MEMORY
+        PLEASE .80 <- #80       PLEASE NOTE END-OF-LINE CHARACTER
+
+        DO (100) NEXT           PLEASE NOTE IO SETUP
+        DO (200) NEXT           PLEASE NOTE MEMORY SETUP
+        DO (300) NEXT           PLEASE NOTE REFERENCE COUNTING SETUP
+        DO (400) NEXT           PLEASE NOTE PARSER TABLE SETUP
+
+        DO (401) NEXT           PLEASE NOTE PARSING
+        DON'T (404) NEXT        PLEASE NOTE PRINTING PROGRAM
+        DO (501) NEXT           PLEASE NOTE EVALUATION
+        DON'T (404) NEXT        PLEASE NOTE PRINTING RESULT
+        DON'T (203) NEXT        PLEASE NOTE MEMORY MAP
+        PLEASE GIVE UP
+
+        PLEASE NOTE DIPLOMATIC RELATIONS
+        PLEASE NOTE .101=LAST READ .102=LAST WRITTEN
+# Character array
+(100)   DO ,101 <- #1
+        PLEASE DO .101 <- #0
+        DO .102 <- #0
+        DO RESUME #1
+# Read a new character
+        PLEASE READ ME A STORY
+(101)   DO (3101) NEXT
+        DO .101 <- .1
+        PLEASE REINSTATE (3101)
+        DO RESUME #1
+(3101)  DON'T THINK YOU CAN HAVE YOUR CAKE AND EAT IT
+        DO WRITE IN ,101
+        PLEASE .1 <- ,101SUB#1
+        DO .2 <- .101
+        DO (1000) NEXT
+        PLEASE DO .101 <- .3~#255
+        PLEASE RESUME '?.1$#512'~'#256$#256'
+# Reverse bits in .2
+(102)   DO .2 <- !2~#15'$!2~#240'
+        DO .2 <- !2~#15'$!2~#240'
+        DO .2 <- !2~#15'$!2~#240'
+        PLEASE RESUME #1
+# Write a new revchar (from .2)
+(103)   PLEASE .1 <- .102
+        DO .102 <- .2
+        DO (1010) NEXT
+        DO ,101SUB#1 <- .3
+        PLEASE READ OUT ,101
+        DO RESUME #1
+
+        DO ASSERT TERRITORIAL CLAIMS
+# Memory initialization, uses value of .200.
+# .204 = items per cell, not used for the (?202) loops!
+(200)   DO .204 <- #7
+        DO ,201 <- .200 BY #32767 BY .204
+(3200)  PLEASE DO .201 <- #0
+        DO .202 <- #16383
+        PLEASE RESUME #1
+
+        PLEASE LET THEM EAT CAKE
+        PLEASE NOTE .201+.202=MEMORY TOP
+# Allocate new cell, .201 (high) and .202 (low) will contain new address.
+# May also be used to traverse memory.
+(201)   DO (3201) NEXT
+(5201)  DON'T (202) NEXT
+        DO COME FROM (7202)
+        PLEASE .1 <- .201
+        DO (4201) NEXT
+        PLEASE REINSTATE (5201)
+        DO RESUME #1
+(4201)  DO (1020) NEXT
+        DO FORGET '#65535~"'?.1$.200'~'#0$#65535'"'~#1
+        DO .201 <- .1
+        PLEASE RESUME #1
+        DON'T STEP ON THE GALOIS FIELD MINES
+(3201)  DO .202 <- "?.202$!202~#16384'"~'#16383$#1'
+        PLEASE RESUME "?!202~.202'$#32768"~"#16384$#16384"
+# Uncontrolled unary operators:
+# "?.1$!1~#16384'"~'#16383$#1'
+# "?#0$'"?.1$!1~#2'"~"#0$#65535"'"~'#49151$#0'
+
+        PLEASE STAND BY FOR ASSIMILATION
+# Handle memory enlargement.
+(202)   PLEASE DON'T RESUME #3
+        DO REINSTATE (202)
+        DO FORGET #1
+        PLEASE STASH .203+,202
+# Calculate the new memory size
+          DO .203 <- '.200$#0'~'#65535$#1'
+# Temporarily copy memory
+          DON'T TELL ME WE HAVE TO MOVE IT ALL?
+          DO ,202 <- .200 BY #32767 BY .204
+          DO (3200) NEXT
+          DO ABSTAIN FROM (5201)
+          PLEASE DO (3202) NEXT
+# Enlarge memory and copy back
+          DO ,201 <- .203 BY #32767 BY .204
+          DO (3200) NEXT
+          PLEASE ABSTAIN FROM (5201)
+          PLEASE DO (5202) NEXT
+# Clean up and return
+          DO .200 <- .203
+          DO ABSTAIN FROM (5201)
+          DO ABSTAIN FROM (202)
+(7202)  DO RETRIEVE .203+,202
+(9202)  DO RESUME '?#32768$.203'~'#16384$#32768'
+(3202)  DO COME FROM (4202)
+        PLEASE DO (201) NEXT
+        DO ,202SUB.201.202#1 <- ,201SUB.201.202#1
+        DO ,202SUB.201.202#2 <- ,201SUB.201.202#2
+        DO ,202SUB.201.202#3 <- ,201SUB.201.202#3
+        DO ,202SUB.201.202#4 <- ,201SUB.201.202#4
+        DO ,202SUB.201.202#5 <- ,201SUB.201.202#5
+        DO ,202SUB.201.202#6 <- ,201SUB.201.202#6
+(4202)  DO ,202SUB.201.202#7 <- ,201SUB.201.202#7
+# Remember to expand if .204 changes!
+(5202)  DO COME FROM (6202)
+        PLEASE DO (201) NEXT
+        DO ,201SUB.201.202#1 <- ,202SUB.201.202#1
+        DO ,201SUB.201.202#2 <- ,202SUB.201.202#2
+        DO ,201SUB.201.202#3 <- ,202SUB.201.202#3
+        DO ,201SUB.201.202#4 <- ,202SUB.201.202#4
+        DO ,201SUB.201.202#5 <- ,202SUB.201.202#5
+        DO ,201SUB.201.202#6 <- ,202SUB.201.202#6
+(6202)  DO ,201SUB.201.202#7 <- ,202SUB.201.202#7
+# Remember to expand if .204 changes!
+# List memory and some important addresses
+        DO TELL ME ALL ABOUT YOURSELF
+(203)   DO READ OUT .201+.202+.301+.302+.311+.312
+        DO (3200) NEXT
+        PLEASE REINSTATE (202)
+        DO ABSTAIN FROM (5201)
+        DO (3203) NEXT
+        PLEASE GIVE UP
+        PLEASE COME FROM (4203)
+(3203)  DO (201) NEXT
+        DO READ OUT .201+.202
+        DO READ OUT ,201SUB.201.202#1
+        DO READ OUT ,201SUB.201.202#2
+        DO READ OUT ,201SUB.201.202#3
+        DO READ OUT ,201SUB.201.202#4
+        DO READ OUT ,201SUB.201.202#5
+        DO READ OUT ,201SUB.201.202#6
+(4203)  DO READ OUT ,201SUB.201.202#7
+
+# Reference count memory model
+        PLEASE NOTE
+          #1+#2=REFERENCE COUNT
+          #3+#4=CAR
+          #5+#6=CDR
+          #7=TYPE (TAG$DATA)
+
+        PLEASE WELCOME TO THE BAZAAR
+# Initialize recycle bin
+(300)   PLEASE DO .301 <- #0
+        DO .302 <- #0
+        PLEASE NOTE NIL=.303+.304
+        DO (303) NEXT
+        DO ,201SUB.311.312#1 <- #0
+        PLEASE ,201SUB.311.312#2 <- #0
+        DO ,201SUB.311.312#3 <- .311
+        DO ,201SUB.311.312#4 <- .312
+        DO ,201SUB.311.312#5 <- .311
+        DO ,201SUB.311.312#6 <- .312
+        DO ,201SUB.311.312#7 <- #0
+        PLEASE .303 <- .311
+        DO .304 <- .312
+        DO RESUME #1
+
+# Increment reference count of cell pointed to by .311+.312.
+        PLEASE REPORT NEW PURCHASES HERE
+(301)   PLEASE .1 <- ,201SUB.311.312#2
+        DO .1 <- "?.1$!1~#16384'"~'#16383$#1'
+        DO ,201SUB.311.312#2 <- .1
+        DO (3301) NEXT
+        PLEASE .1 <- ,201SUB.311.312#1
+        DO .1 <- "?.1$!1~#16384'"~'#16383$#1'
+        DO ,201SUB.311.312#1 <- .1
+        DO (3301) NEXT
+        PLEASE NOTE THAT IMMORTALITY IS TREASON
+        DO ,201SUB.311.312#2 <- #0
+        DO RESUME #1
+(3301)  PLEASE RESUME "?!1~.1'$#32768"~"#16384$#16384"
+
+        PLEASE STAND IN LINE FOR TERMINATION
+        DO COME FROM (4302)
+# Decrement reference count of cell pointed to by .311+.312.
+(302)   PLEASE .1 <- ,201SUB.311.312#2
+        DO .1 <- "?#0$'"?.1$!1~#2'"~"#0$#65535"'"~'#49151$#0'
+        DO ,201SUB.311.312#2 <- .1
+        DO (3302) NEXT
+        PLEASE .1 <- ,201SUB.311.312#1
+        DO .1 <- "?#0$'"?.1$!1~#2'"~"#0$#65535"'"~'#49151$#0'
+        DO ,201SUB.311.312#1 <- .1
+        DO (3302) NEXT
+# Count reached zero, release cell
+        PLEASE .1 <- .311
+        DO .2 <- .312
+        DO .311 <- ,201SUB.1.2#3
+        DO .312 <- ,201SUB.1.2#4
+        DO ,201SUB.1.2#3 <- .301
+        DO ,201SUB.1.2#4 <- .302
+        PLEASE .301 <- .1
+(4302)  DO .302 <- .2
+(3302)  PLEASE RESUME "?'#65535~"'?.1$#16383'~'#0$#65535'"'$#1"~#3
+
+        PLEASE LET ME INTRODUCE YOU TO .311+.312
+# Receive pointer to cell, possibly recycled, in .311+.312
+(303)   PLEASE (3303) NEXT
+        DO .1 <- .301
+        DO .2 <- .302
+        DO .301 <- ,201SUB.1.2#3
+        DO .302 <- ,201SUB.1.2#4
+        PLEASE STASH .1+.2
+          DO .311 <- ,201SUB.1.2#5
+          DO .312 <- ,201SUB.1.2#6
+          DO (302) NEXT
+        PLEASE RETRIEVE .1+.2
+        DO .311 <- .1
+        DO .312 <- .2
+        DO (5303) NEXT
+(3303)  PLEASE DO (4303) NEXT
+        DO (201) NEXT
+        DO .311 <- .201
+        DO .312 <- .202
+(5303)  DO ,201SUB.311.312#1 <- #32767
+        PLEASE ,201SUB.311.312#2 <- #32767
+# Initialize pointers to null so errors are (hopefully) caught easier.
+        DO ,201SUB.311.312#3 <- #0
+        DO ,201SUB.311.312#5 <- #0
+        PLEASE RESUME #2
+(4303)  DO RESUME "?!301~.301'$#1"~#3
+# As (303), but set CDR to NIL
+(304)   PLEASE (303) NEXT
+        DO ,201SUB.311.312#5 <- .303
+        DO ,201SUB.311.312#6 <- .304
+        DO RESUME #1
+# As (304), but also set CAR to NIL
+(305)   PLEASE (304) NEXT
+        DO ,201SUB.311.312#3 <- .303
+        DO ,201SUB.311.312#4 <- .304
+        DO RESUME #1
+
+# ,401+,402 is a table of pointers to the parameterless
+# primitive functions.
+        PLEASE NOTE `=#1 K=#2 K1=#3 S=#4 S1=#5 S2=#6 I=#7 V=#8 C=#9
+                    CONT=#10 D=#11 D1=#12 .=#13 E=#14 @=#15 ?=#16
+                    |=#17 (R=#18=#13$.80)
+(3400)  PLEASE STASH .1
+          PLEASE (305) NEXT
+        PLEASE RETRIEVE .1
+        DO ,201SUB.311.312#2 <- #0
+        DO ,201SUB.311.312#7 <- .1$#0
+        DO ,401SUB.1 <- .311
+        DO ,402SUB.1 <- .312
+        DO RESUME #1
+(400)   PLEASE ,401 <- #18
+        DO ,402 <- #18
+        DO .1 <- #2     DO (3400) NEXT
+        DO .1 <- #4     DO (3400) NEXT
+        DO .1 <- #7     DO (3400) NEXT
+        DO .1 <- #8     DO (3400) NEXT
+        DO .1 <- #9     DO (3400) NEXT
+        DO .1 <- #11    DO (3400) NEXT
+        DO .1 <- #14    DO (3400) NEXT
+        DO .1 <- #15    DO (3400) NEXT
+        DO .1 <- #17    DO (3400) NEXT
+        DO .1 <- #18    DO (3400) NEXT
+        PLEASE ,201SUB.311.312#7 <- #13$.80
+# ,400 is a character table.
+        PLEASE NOTE 7=ILLEGAL 6=BLANK 5=COMMENT
+                    4=PRIMITIVE 3=KRAPS 2=WHAT 1=SPOT
+(410)   PLEASE ,400 <- #127
+        PLEASE .1 <- #127
+        PLEASE (3410) NEXT
+        DO ,400SUB#8   <- #6 $ #0
+        DO ,400SUB#10  <- #6 $ #0
+        DO ,400SUB#13  <- #6 $ #0
+        DO ,400SUB#32  <- #6 $ #0
+        DO ,400SUB#35  <- #5 $ #0
+        DO ,400SUB#46  <- #1 $ #13
+        DO ,400SUB#63  <- #2 $ #16
+        DO ,400SUB#64  <- #4 $ #15
+        DO ,400SUB#67  <- #4 $ #9
+        DO ,400SUB#68  <- #4 $ #11
+        DO ,400SUB#69  <- #4 $ #14
+        DO ,400SUB#73  <- #4 $ #7
+        DO ,400SUB#75  <- #4 $ #2
+        DO ,400SUB#82  <- #4 $ #18
+        DO ,400SUB#83  <- #4 $ #4
+        DO ,400SUB#86  <- #4 $ #8
+        DO ,400SUB#96  <- #3 $ #0
+        DO ,400SUB#99  <- #4 $ #9
+        DO ,400SUB#100 <- #4 $ #11
+        DO ,400SUB#101 <- #4 $ #14
+        DO ,400SUB#105 <- #4 $ #7
+        DO ,400SUB#107 <- #4 $ #2
+        DO ,400SUB#114 <- #4 $ #18
+        DO ,400SUB#115 <- #4 $ #4
+        DO ,400SUB#118 <- #4 $ #8
+(5410)  DO ,400SUB#124 <- #4 $ #17
+        PLEASE COME FROM (3410)
+(3410)  PLEASE (4410) NEXT
+(4410)  PLEASE ,400SUB.1 <- #7
+        DO .1 <- "?.1$!1~#64'"~'#63$#1'
+        DO RESUME "?!1~.1'$#64"~"#64$#64"
+        DO COME FROM (5410)
+# ,403 is a character table the other way.
+        PLEASE NOTE KSIVCDE@|=#7 K1,S1,D1=#6 S2=#5
+                    CONT=#4 KRAPS=#3 WHAT=#2 SPOT=#1
+(420)   PLEASE ,403 <- #17
+        DO ,403SUB#1  <- #3 $ #6
+        DO ,403SUB#2  <- #7 $ #210
+        DO ,403SUB#3  <- #6 $ #210
+        DO ,403SUB#4  <- #7 $ #202
+        DO ,403SUB#5  <- #6 $ #202
+        DO ,403SUB#6  <- #5 $ #202
+        DO ,403SUB#7  <- #7 $ #146
+        DO ,403SUB#8  <- #7 $ #106
+        DO ,403SUB#9  <- #7 $ #194
+        DO ,403SUB#10 <- #4 $ #0
+        DO ,403SUB#11 <- #7 $ #34
+        DO ,403SUB#12 <- #6 $ #34
+        DO ,403SUB#13 <- #1 $ #116
+        DO ,403SUB#14 <- #7 $ #162
+        DO ,403SUB#15 <- #7 $ #2
+        DO ,403SUB#16 <- #2 $ #252
+        DO ,403SUB#17 <- #7 $ #62
+        PLEASE RESUME #1
+
+# Parser continuation stack cell types
+        PLEASE NOTE 3=TOP 2=BOTH 1=LAST
+# Generate stack top in .401+.402
+(401)   DO (305) NEXT
+        DO .401 <- .311
+        DO .402 <- .312
+        DO ,201SUB.401.402#7 <- #3
+        PLEASE (402) NEXT
+        PLEASE ABSTAIN FROM SUCH MEANINGLESS LANGUAGE
+(4402)  DO RESUME '?"?!101~#128'$!101~.101'"$#2'~#3
+(3402)  DO (3101) NEXT
+        DOG ATE END OF MY ESSAY
+# Parse expression and send to continuation
+        DO COME FROM (5402)
+(402)   DO (3402) NEXT
+        PLEASE (4402) NEXT
+(5402)  DO (412) NEXT
+# Comments
+        DON'T COMMENT
+(412)   PLEASE (422) NEXT
+        DO COME FROM (4412)
+        DO (3402) NEXT
+(4412)  PLEASE (3412) NEXT
+(3412)  DO FORGET "?'#255~"'?.101$#10'~'#0$#65535'"'$#1"~#1
+        DO FORGET "?'#255~"'?.101$#13'~'#0$#65535'"'$#1"~#1
+        DO RESUME #1
+# Primitive functions
+        DO YOU THINK _THIS_ IS PRIMITIVE?
+(422)   PLEASE (432) NEXT
+        DO .311 <- ,401SUB!410~"#0$#31"'
+        DO .312 <- ,402SUB!410~"#0$#31"'
+        DO FORGET #1
+        PLEASE (403) NEXT
+# Application
+        PLEASE FILL OUT THE APPLICATION FORM
+(432)   PLEASE (442) NEXT
+        DO (305) NEXT
+        DO ,201SUB.311.312#5 <- .401
+        DO ,201SUB.311.312#6 <- .402
+        DO ,201SUB.311.312#7 <- #2
+        PLEASE .401 <- .311
+        DO .402 <- .312
+        DO RESUME #3
+# ?x
+        DO WHAT?
+(442)   PLEASE (452) NEXT
+        DO (3402) NEXT
+        DO (305) NEXT
+        DO ,201SUB.311.312#7 <- !410~"#0$#31"'$.101
+        DO FORGET #3
+        PLEASE (403) NEXT
+# .x
+        DOT OR SPOT, WE'RE ALL CIVILIZED PEOPLE HERE
+(452)   PLEASE (462) NEXT
+        DO (3402) NEXT
+        DO (305) NEXT
+        DO .2 <- .101
+        PLEASE (102) NEXT
+        DO ,201SUB.311.312#7 <- !410~"#0$#31"'$.2
+        DO FORGET #4
+        PLEASE (403) NEXT
+(462)   DO .410 <- ,400SUB.101
+        DO RESUME .410~'#7$#0'
+
+# Handle a parsed expression in .311+.312
+# Remember to resume one extra level afterwards if continuing.
+# First top expression
+        DO YOU KNOW THE TOP MAN FOR THIS OPERATION?
+        DO COME FROM (3423)
+(403)   PLEASE (413) NEXT
+        DO STASH .311+.312
+          DO .311 <- .401
+          DO .312 <- .402
+          PLEASE (302) NEXT
+        DO RETRIEVE .311+.312
+# Return all the way from (401)
+        DO RESUME #4
+# Still one subexpression remaining
+        PLEASE CAN I HAVE SOME MORE?
+(413)   PLEASE (423) NEXT
+        DO ,201SUB.401.402#3 <- .311
+        DO ,201SUB.401.402#4 <- .312
+        DO ,201SUB.401.402#7 <- #1
+        PLEASE RESUME #3
+# Application constructed
+        DOUBLE APPLICATION FORM RECEIVED
+(423)   PLEASE (433) NEXT
+        DO .1 <- ,201SUB.401.402#5
+        DO .2 <- ,201SUB.401.402#6
+        DO ,201SUB.401.402#5 <- .311
+        DO ,201SUB.401.402#6 <- .312
+        DO ,201SUB.401.402#7 <- #1$#0
+        DO .311 <- .401
+        PLEASE .312 <- .402
+        DO .401 <- .1
+        DO .402 <- .2
+(3423)  DO FORGET #2
+(433)   PLEASE RESUME ,201SUB.401.402#7
+
+# Unparsing .311+.312
+        DO YOU WANT A REPORT?
+(404)   DO STASH .311+.312
+          PLEASE (6404) NEXT
+        DO RETRIEVE .311+.312
+        DO .2 <- .80 DO (103) NEXT
+        DO RESUME #1
+# Uses weak pointer stack in .401+.402 with NIL at bottom (which is of type 0)
+(6404)  DO .401 <- .303
+        DO .402 <- .304
+        DO COME FROM (4404)
+        PLEASE DO (5404) NEXT
+# Unparse the remainder of the stack
+        PLEASE (3404) NEXT
+        DO .311 <- ,201SUB.401.402#3
+        DO .312 <- ,201SUB.401.402#4
+        PLEASE STASH .311+.312
+          DO .1 <- ,201SUB.401.402#5
+          DO .2 <- ,201SUB.401.402#6
+          DO ,201SUB.401.402#3 <- .303
+          DO ,201SUB.401.402#4 <- .304
+          DO ,201SUB.401.402#5 <- .303
+          DO ,201SUB.401.402#6 <- .304
+          DO .311 <- .401
+          DO .312 <- .402
+          DO .401 <- .1
+          DO .402 <- .2
+          PLEASE DO (302) NEXT
+(4404)  DO RETRIEVE .311+.312
+(3404)  DO RESUME "?"#65535~',201SUB.401.402#7'"$#2"~#3
+        DO COME FROM (5404)
+(5404)  PLEASE DO (414) NEXT
+# Primitives
+        PLEASE DON'T BRING AUSTRALOPITHECI INTO THE HOUSE
+(414)   PLEASE DO (424) NEXT
+        DO .2 <- .411~'#0$#255'
+        DO (103) NEXT
+        DO RESUME #2
+# Single parameter
+(424)   PLEASE DO (434) NEXT
+        DO .2 <- #6 DO (103) NEXT
+        DO .2 <- .411~'#0$#255'
+        DO (103) NEXT
+        PLEASE COME FROM (4434)
+(3424)  DO .1 <- ,201SUB.311.312#3
+        DO .312 <- ,201SUB.311.312#4
+        DO .311 <- .1
+        DO RESUME #2
+# Two-parameter
+        DOUBLE DOUBLE TOIL AND TROUBLE
+(434)   PLEASE DO (444) NEXT
+        DO .2 <- #6 DO (103) NEXT DO (103) NEXT 
+        DO .2 <- .411~'#0$#255'
+        DO (103) NEXT
+        DO COME FROM (3454)
+(3434)  PLEASE STASH .311+.312
+          PLEASE DO (303) NEXT
+          DO ,201SUB.311.312#5 <- .401
+          DO ,201SUB.311.312#6 <- .402
+          DO ,201SUB.311.312#7 <- #1
+          DO .401 <- .311 DO .402 <- .312
+        PLEASE RETRIEVE .311+.312
+        DO ,201SUB.401.402#3 <- ,201SUB.311.312#5
+        DO ,201SUB.401.402#4 <- ,201SUB.311.312#6
+(4434)  DO FORGET #1
+# Continuations
+        DO CONTINUATIONS DREAM OF MONADIC SHEEP
+(444)   PLEASE DO (454) NEXT
+        PLEASE DO .2 <- #60   DO (103) NEXT
+        PLEASE DO .2 <- #194  DO (103) NEXT
+        PLEASE DO .2 <- #242  DO (103) NEXT
+        PLEASE DO .2 <- #114  DO (103) NEXT
+        PLEASE DO .2 <- #42   DO (103) NEXT
+        PLEASE DO .2 <- #124  DO (103) NEXT
+        PLEASE RESUME #5
+# Applications
+(454)   PLEASE DO (464) NEXT
+        PLEASE FORGET #2
+        DO .2 <- #6
+(3454)  DO (103) NEXT
+# ?x
+        DON'T LOOK LIKE A QUESTION MARK
+(464)   PLEASE DO (474) NEXT
+        DO .2 <- .411~'#0$#255' DO (103) NEXT
+        PLEASE DO .2 <- .410~'#0$#255'
+        DO (102) NEXT DO (103) NEXT
+        DO RESUME #7
+# .x
+        PLEASE CAN YOU SPOT THE DIFFERENCE?
+(474)   PLEASE DO (484) NEXT
+        DO .2 <- .411~'#0$#255'
+        DO .410 <- .410~'#0$#255'
+        DO .411 <- #7$#74
+        PLEASE DO (3474) NEXT
+        DO (103) NEXT
+        PLEASE DO .2 <- .410
+        DO (103) NEXT
+        DO RESUME #8
+# Resume 1 or 7 times
+(3474)  DO RESUME '"?"#255~'"?.410$.80"~"#0$#65535"'"$#3"$#1'~#11
+(484)   DO .410 <- ,201SUB.311.312#7
+        DO .411 <- ,403SUB!410~"#31$#0"'
+        PLEASE RESUME .411~'#7$#0'
+
+        PLEASE WELCOME TO THE PITS OF EVAL
+# May use up the reference to .311+.312.
+(501)   DO .511 <- .311
+        DO .512 <- .312
+        PLEASE DO (3501) NEXT
+        DO .311 <- .511
+        DO .312 <- .512
+# Continuation types
+        PLEASE NOTE EVAL2=1 APPLY=2
+        PLEASE NOTE
+          .601=CURRENT CHARACTER
+          .501+.502=CURRENT CONTINUATION
+          .511+.512=CURRENT EXPRESSION
+(3501)  DO .601 <- #256
+        DO (304) NEXT
+        DO ,201SUB.311.312#3 <- ,401SUB#14
+        DO ,201SUB.311.312#4 <- ,402SUB#14
+        DO ,201SUB.311.312#7 <- #2
+        DO .501 <- .311
+        DO .502 <- .312
+# Evaluate .511+.512 with the continuation given in .501+.502.
+        PLEASE COME FROM (3622)
+        PLEASE COME FROM (7503)
+(502)   DO (3502) NEXT
+        DO (503) NEXT
+(4502)  PLEASE RESUME "?'#15~"',201SUB.511.512#7'~'#30$#0'"'$#1"~#3
+        DO NOTE KRAPS
+        PLEASE COME FROM (5502)
+(3502)  DO (4502) NEXT
+        PLEASE (303) NEXT
+        DO ,201SUB.311.312#5 <- .501
+        DO ,201SUB.311.312#6 <- .502
+        DO ,201SUB.311.312#7 <- #1
+        DO .501 <- .311
+        DO .502 <- .312
+        DO .311 <- ,201SUB.511.512#5
+        DO .312 <- ,201SUB.511.512#6
+        PLEASE DO (301) NEXT
+        DO ,201SUB.501.502#3 <- .311
+        DO ,201SUB.501.502#4 <- .312
+        DO .311 <- ,201SUB.511.512#3
+        DO .312 <- ,201SUB.511.512#4
+        PLEASE DO (301) NEXT
+        PLEASE STASH .311+.312
+          DO .311 <- .511
+          DO .312 <- .512
+          DO (302) NEXT
+        PLEASE RETRIEVE .311+.312
+        DO .511 <- .311
+(5502)  DO .512 <- .312
+# Send .511+.512 to the current continuation.
+        PLEASE NOTE THAT WE ARE CURRENTLY PROCESSING YOUR APPLICATION
+(503)   DO FORGET #1
+        PLEASE (3503) NEXT
+        DO .311 <- ,201SUB.501.502#3
+        DO .312 <- ,201SUB.501.502#4
+        DO (301) NEXT
+        PLEASE STASH .311+.312
+          DO .311 <- .501
+          DO .312 <- .502
+          PLEASE STASH .311+.312
+            DO .311 <- ,201SUB.501.502#5
+            DO .312 <- ,201SUB.501.502#6
+            DO (301) NEXT
+            DO .501 <- .311
+            DO .502 <- .312
+          PLEASE RETRIEVE .311+.312
+          DO (302) NEXT
+(8503)  PLEASE RETRIEVE .311+.312
+(4503)  PLEASE RESUME ,201SUB.501.502#7
+        PLEASE STAY WITH US FOR THE SECOND HALF OF THE SHOW
+(3503)  PLEASE (4503) NEXT
+        DO (5503) NEXT
+        DO FORGET #1
+        DO .311 <- .501
+        DO .312 <- .502
+        PLEASE STASH .311+.312
+          DO .311 <- ,201SUB.501.502#3
+          DO .312 <- ,201SUB.501.502#4
+          DO (301) NEXT
+          PLEASE STASH .311+.312
+            DO .311 <- ,201SUB.501.502#5
+            DO .312 <- ,201SUB.501.502#6
+            PLEASE DO (301) NEXT
+            DO STASH .311+.312
+              DO (304) NEXT
+              DO ,201SUB.311.312#3 <- .511
+              DO ,201SUB.311.312#4 <- .512
+              DO ,201SUB.311.312#7 <- #2
+              DO .501 <- .311
+              DO .502 <- .312
+            PLEASE RETRIEVE .311+.312
+            DO ,201SUB.501.502#5 <- .311
+            DO ,201SUB.501.502#6 <- .312
+          PLEASE RETRIEVE .311+.312
+          DO .511 <- .311
+          DO .512 <- .312
+        PLEASE RETRIEVE .311+.312
+(7503)  DO (302) NEXT
+        DO D DO DAH
+(6503)  PLEASE RESUME 
+                "?'#15~"'?"',201SUB.511.512#7'~'#31$#0'"$#11'
+                ~"#0$#65535""'$#1"~#3
+(5503)  DO (6503) NEXT
+        DO FORGET #2
+        DO .311 <- ,201SUB.501.502#3
+        DO .312 <- ,201SUB.501.502#4
+        DO (301) NEXT
+        PLEASE STASH .311+.312
+          DO (304) NEXT
+          DO ,201SUB.311.312#7 <- #12$#0
+          DO .511 <- .311
+          DO .512 <- .312
+        PLEASE RETRIEVE .311+.312
+        DO ,201SUB.511.512#3 <- .311
+        DO ,201SUB.511.512#4 <- .312
+        DO .311 <- ,201SUB.501.502#5
+        DO .312 <- ,201SUB.501.502#6
+        PLEASE DO (301) NEXT
+        DO STASH .311+.312
+          DO .311 <- .501
+          DO .312 <- .502
+          PLEASE DO (302) NEXT
+        DO RETRIEVE .311+.312
+        DO .501 <- .311
+        DO .502 <- .312
+        DO (503) NEXT
+
+        PLEASE LEARN THE DIFFERENCE BETWEEN APPLYS AND ORANGUTANS
+# Apply .311+.312 to .511+.512 with the current continuation .501+.502
+        PLEASE COME FROM (8503)
+        DO COME FROM (603)
+(601)   PLEASE DO (627) NEXT
+        DO (503) NEXT
+        PLEASE DON'T CLIMB INTO THE PIPES
+(627)   PLEASE DO (626) NEXT
+        DO .311 <- .511
+        DO .312 <- .512
+        PLEASE DO (3627) NEXT
+        DO STASH .311+.312
+          PLEASE DO (305) NEXT
+          DO .2 <- .601
+          DO (102) NEXT
+          DO ,201SUB.311.312#7 <- #13$.2
+          DO .511 <- .311
+          DO .512 <- .312
+        DO RETRIEVE .311+.312
+        PLEASE DO (603) NEXT
+(3627)  PLEASE DO (4627) NEXT
+        DO FORGET #1
+        DO .511 <- ,401SUB#8
+        DO .512 <- ,402SUB#8
+        PLEASE DO (603) NEXT
+(4627)  PLEASE RESUME '?.601$#512'~'#256$#256'
+        PLEASE WHAT DID YOU SAY?
+(626)   PLEASE DO (625) NEXT
+        DO .602 <- ',201SUB.311.312#7'~'#0$#255'
+        DO (302) NEXT
+        DO .311 <- .511
+        DO .312 <- .512
+        PLEASE DO (3626) NEXT
+        DO FORGET #1
+        DO .511 <- ,401SUB#7
+        DO .512 <- ,402SUB#7
+        PLEASE DO (603) NEXT
+(3626)  PLEASE DO (4626) NEXT
+        DO FORGET #2
+        DO .511 <- ,401SUB#8
+        DO .512 <- ,402SUB#8
+        PLEASE DO (603) NEXT
+(4626)  DO RESUME "?'#255~"'?.601$.602'~'#0$#255'"'$#2"~#3
+        DON'T FALL INTO THE WHIRLPOOL
+(625)   PLEASE DO (624) NEXT
+        DO .311 <- .511
+        DO .312 <- .512
+        DO (3625) NEXT
+        DO FORGET #2
+        DO .601 <- .101
+        DO .511 <- ,401SUB#7
+        DO .512 <- ,402SUB#7
+        PLEASE DO (603) NEXT
+(3625)  DO (3101) NEXT
+        PLEASE REINSTATE (3101)
+        DO FORGET #3
+        DO .601 <- #256
+        DO .511 <- ,401SUB#8
+        DO .512 <- ,402SUB#8
+        PLEASE DO (603) NEXT
+        DO YOU THINK THIS IS THE END?
+(624)   PLEASE DO (623) NEXT
+        DO RESUME #5
+        PLEASE STAY IN ONE SPOT SO I CAN HIT YOU
+(623)   PLEASE DO (622) NEXT
+        DO .2 <- ',201SUB.311.312#7'~'#0$#255'
+        DO (103) NEXT
+        DO (302) NEXT
+        DO RESUME #5
+        DON'T PROMISE WHAT YOU CAN'T KEEP
+(622)   PLEASE DO (621) NEXT
+        DO FORGET #6
+        DO STASH .311+.312
+          PLEASE DO (303) NEXT
+          DO ,201SUB.311.312#3 <- .511
+          DO ,201SUB.311.312#4 <- .512
+          DO ,201SUB.311.312#5 <- .501
+          DO ,201SUB.311.312#6 <- .502
+          DO ,201SUB.311.312#7 <- #1
+          DO .501 <- .311
+          DO .502 <- .312
+        PLEASE RETRIEVE .311+.312
+        DO STASH .311+.312
+          DO .1 <- ,201SUB.311.312#3
+          DO .312 <- ,201SUB.311.312#4
+          DO .311 <- .1
+          DO (301) NEXT
+          DO .511 <- .311
+          DO .512 <- .312
+        PLEASE RETRIEVE .311+.312
+(3622)  DO (302) NEXT
+        DO EXPECT SOME DELAY
+(621)   PLEASE DO (620) NEXT
+        DO RESUME #7
+        PLEASE CONTINUE, NOTHING TO SEE HERE...
+(620)   PLEASE DO (619) NEXT
+        DO STASH .311+.312
+          DO .311 <- .501
+          DO .312 <- .502
+          DO (302) NEXT
+        PLEASE RETRIEVE .311+.312
+        DO STASH .311+.312
+          DO .1 <- ,201SUB.311.312#3
+          DO .312 <- ,201SUB.311.312#4
+          DO .311 <- .1
+          DO (301) NEXT
+          PLEASE .501 <- .311
+          PLEASE .502 <- .312
+        PLEASE RETRIEVE .311+.312
+        DO (302) NEXT
+        DO RESUME #8
+        DO CALL ME ANY TIME
+(619)   PLEASE DO (618) NEXT
+        DO FORGET #8
+        DO .311 <- .511
+        DO .312 <- .512
+        DO STASH .311+.312
+          DO .311 <- .501
+          DO .312 <- .502
+          DO (301) NEXT
+          PLEASE DO (304) NEXT
+          DO ,201SUB.311.312#3 <- .501
+          DO ,201SUB.311.312#4 <- .502
+          DO ,201SUB.311.312#7 <- #10$#0
+          DO .511 <- .311
+          DO .512 <- .312
+        PLEASE RETRIEVE .311+.312
+        DO (603) NEXT
+        DON'T LOOK INTO THE ABYSS OR THE ABYSS LOOKS BACK INTO YOU
+(618)   PLEASE DO (617) NEXT
+        DO STASH .311+.312
+          DO .311 <- .511
+          DO .312 <- .512
+          DO (302) NEXT
+        PLEASE RETRIEVE .311+.312
+        DO .511 <- .311
+        DO .512 <- .312
+        DO RESUME #10
+        DOESN'T REALLY DO MUCH
+(617)   PLEASE DO (616) NEXT
+        DO RESUME #11
+        DO WATCH OUT FOR SUBSTITUTES
+(616)   PLEASE DO (615) NEXT
+        DO FORGET #11
+        DO STASH .311+.312+.511+.512
+            DO .311 <- .511
+            DO .312 <- .512
+            DO (301) NEXT
+            PLEASE DO (303) NEXT
+            DO ,201SUB.311.312#5 <- .501
+            DO ,201SUB.311.312#6 <- .502
+            DO ,201SUB.311.312#7 <- #1
+            DO .501 <- .311
+            DO .502 <- .312
+            PLEASE DO (303) NEXT
+            DO ,201SUB.311.312#5 <- .511
+            DO ,201SUB.311.312#6 <- .512
+            DO ,201SUB.311.312#7 <- #1$#0
+            DO ,201SUB.501.502#3 <- .311
+            DO ,201SUB.501.502#4 <- .312
+            DO .511 <- .311
+            DO .512 <- .312
+          PLEASE RETRIEVE .311+.312
+          DO STASH .311+.312
+            DO .1 <- ,201SUB.311.312#5
+            DO .312 <- ,201SUB.311.312#6
+            DO .311 <- .1
+            DO (301) NEXT
+            DO ,201SUB.511.512#3 <- .311
+            DO ,201SUB.511.512#4 <- .312
+          PLEASE RETRIEVE .311+.312
+          DO STASH .311+.312
+            DO .1 <- ,201SUB.311.312#3
+            DO .312 <- ,201SUB.311.312#4
+            DO .311 <- .1
+            PLEASE DO (301) NEXT
+            DO .511 <- .311
+            DO .512 <- .312
+          PLEASE RETRIEVE .311+.312
+          DO (302) NEXT
+          DO .311 <- .511
+          DO .312 <- .512
+        PLEASE RETRIEVE .511+.512
+        DO (603) NEXT
+(615)   PLEASE DO (614) NEXT
+        DO STASH .311+.312
+          DO (303) NEXT
+          DO ,201SUB.311.312#5 <- .511
+          DO ,201SUB.311.312#6 <- .512
+          DO ,201SUB.311.312#7 <- #6$#0
+          DO .511 <- .311
+          DO .512 <- .312
+        PLEASE RETRIEVE .311+.312
+        DO STASH .311+.312
+          DO .1 <- ,201SUB.311.312#3
+          DO .312 <- ,201SUB.311.312#4
+          DO .311 <- .1
+          PLEASE DO (301) NEXT
+          DO ,201SUB.511.512#3 <- .311
+          DO ,201SUB.511.512#4 <- .312
+        PLEASE RETRIEVE .311+.312
+        DO (302) NEXT
+        PLEASE RESUME #13
+(614)   PLEASE DO (613) NEXT
+        DO FORGET #13
+        DO .602 <- #5$#0
+        DO (602) NEXT
+        DON'T WORRY ABOUT THE CONSTANT NOISE
+(613)   PLEASE DO (612) NEXT
+        DO STASH .311+.312
+          DO .311 <- .511
+          DO .312 <- .512
+          DO (302) NEXT
+        PLEASE RETRIEVE .311+.312
+        DO STASH .311+.312
+          DO .1 <- ,201SUB.311.312#3
+          DO .312 <- ,201SUB.311.312#4
+          DO .311 <- .1
+          DO (301) NEXT
+          DO .511 <- .311
+          DO .512 <- .312
+        PLEASE RETRIEVE .311+.312
+        DO (302) NEXT
+        PLEASE RESUME #15
+(612)   PLEASE DO (611) NEXT
+        DO FORGET #15
+        DO .602 <- #3$#0
+        DO (602) NEXT
+(611)   PLEASE DO (610) NEXT
+        PLEASE HOW DID YOU GET HERE?
+(610)   PLEASE RESUME ',201SUB.311.312#7'~'#31$#0'
+# Only for primitives!
+(602)   DO (304) NEXT
+        DO ,201SUB.311.312#3 <- .511
+        DO ,201SUB.311.312#4 <- .512
+        DO ,201SUB.311.312#7 <- .602
+        DO .511 <- .311
+        DO .512 <- .312
+        PLEASE RESUME #2
+(603)   PLEASE FORGET #2