CosmicOS full message

0introduce numbers (in unary notation)MATH
1introduce equality for unary numbersMATH
2now introduce other relational operatorsMATH
3introduce the NOT logical operatorMATH
4introduce additionMATH
5introduce subtractionMATH
6introduce multiplicationMATH
7introduce a simple form of binary notationMATH
8show local assignmentMATH
9demonstrate existence of memoryMATH
10use equality for truth valuesMATH
11show mechanisms for branchingMATH
12introduce the AND logical operatorMATH
13introduce the OR logical operatorMATH
14illustrate pairsMATH
15introduce mutable objects, and side-effectsMATH
16illustrate lists and some list operatorsMATH
17describe changes to the implicit interpreter to allow new special formsHACK
18introduce sugar for letMATH
19build up functions of several variablesMATH
20show map function for applying a function across the elements of a listMATH
21end of part 1, start of part 2NOTE
22show an example of recursive evaluationMATH
23some pure lambda calculus definitions - optionalMATH
24introduce universal quantifierMATH
25introduce existential quantifierMATH
26introduce logical implicationMATH
27introduce sets and set membershipMATH
28introduce graph structuresMATH
29show how to execute a sequence of instructionsMATH
30introduce environment/hashmap structureMATH
31introduce simple mutable structuresOBJECT
32introduce method handler wrappersOBJECT
33introduce turing machine modelTURING
34introduce simple form of typing, for ease of documentation.OBJECT
35an example object -- a 2D pointOBJECT
36an example object -- a containerOBJECT
37expressing inheritanceOBJECT
38adding a special form for classesOBJECT
39wrapper class for cellsOBJECT
40playing around with doors and roomsMUD
41end of part 2, start of part 3NOTE
42simulating unless gatesGATE
43testing alternate primer based on gates: cos_not circuitGATE
44testing alternate primer based on gates: cos_and circuitGATE
45testing alternate primer based on gates: cos_or circuitGATE
46testing alternate primer based on gates: cos_nor circuitGATE
47testing alternate primer based on gates: cos_osc circuitGATE
48testing alternate primer based on gates: cos_sr circuitGATE
49testing alternate primer based on gates: cos_d circuitGATE
50probing networks of unless gatesGATE
51end of part 3, start of part 4NOTE
52a mechanism for referring to parts of the messageSELF
53some preparatory work for integrating with Java codeJAVA
54class translation 'COS_JavaTest'JAVA
55check that automatic conversion is workableJAVA
56another simple little text-adventure spaceMUD
57native implementation of a Java list, hash classesJAVA
58testing the JList classJAVA
59basic iterator implementationJAVA
60class translation 'COS_JDoor'JAVA
61class translation 'COS_JThing'JAVA
62class translation 'COS_JRoom'JAVA
63class translation 'COS_JNamed'JAVA
64class translation 'COS_JWorld'JAVA
65class translation 'COS_JRobo'JAVA
66test JRoom, JDoor, JThing, etcJAVA

#   Author: Paul Fitzpatrick, paulfitz@csail.mit.edu
#   Copyright (c) 2005 Paul Fitzpatrick
#
#   This file is part of CosmicOS.
#
#   CosmicOS 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.
#
#   CosmicOS 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 CosmicOS; if not, write to the Free Software
#   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#

0. introduce numbers (in unary notation)

# Here we count up, go through some primes, etc.
# There is some syntax around the numbers, but that doesn't
# need to be understood at this point.
# Any 'words' written here are converted to arbitrary integers
# in the actual message.  Any word ending in -in-unary will be given
# in unary rather than the binary code used in the main body
# of the message.
intro-in-unary U1U;
000102233hear
intro-in-unary U11U;
0001102233hear
intro-in-unary U111U;
00011102233hear
intro-in-unary U1111U;
000111102233hear
intro-in-unary U11111U;
0001111102233hear
intro-in-unary U111111U;
00011111102233hear
intro-in-unary U1111111U;
000111111102233hear
intro-in-unary U11111111U;
0001111111102233hear
intro-in-unary U111111111U;
00011111111102233hear
intro-in-unary U1111111111U;
000111111111102233hear
intro-in-unary U11111111111U;
0001111111111102233hear
intro-in-unary U111111111111U;
00011111111111102233hear
intro-in-unary U1111111111111U;
000111111111111102233hear
intro-in-unary U11111111111111U;
0001111111111111102233hear
intro-in-unary U111111111111111U;
00011111111111111102233hear
intro-in-unary U1111111111111111U;
000111111111111111102233hear
intro-in-unary U11U;
0001102233hear
intro-in-unary U111U;
00011102233hear
intro-in-unary U11111U;
0001111102233hear
intro-in-unary U1111111U;
000111111102233hear
intro-in-unary U11111111111U;
0001111111111102233hear
intro-in-unary U1111111111111U;
000111111111111102233hear
intro-in-unary U1U;
000102233hear
intro-in-unary U1111U;
000111102233hear
intro-in-unary U111111111U;
00011111111102233hear
intro-in-unary U1111111111111111U;
000111111111111111102233hear

1. introduce equality for unary numbers

# The intro operator does nothing essential, and could be
# omitted - it just tags the first use of a new operator.
# The = operator is introduced alongside a duplication of
# unary numbers.  The meaning will not quite by nailed down
# until we see other relational operators.
=-in-unary U1U U1U;
01100100102233hear
=-in-unary U11U U11U;
0110011001102233hear
=-in-unary U111U U111U;
011001110011102233hear
=-in-unary U1111U U1111U;
01100111100111102233hear
=-in-unary U11111U U11111U;
0110011111001111102233hear
=-in-unary U111111U U111111U;
011001111110011111102233hear
=-in-unary U1111111U U1111111U;
01100111111100111111102233hear
=-in-unary U11111111U U11111111U;
0110011111111001111111102233hear
=-in-unary U1U U1U;
01100100102233hear
=-in-unary U111111U U111111U;
011001111110011111102233hear
=-in-unary U11U U11U;
0110011001102233hear

2. now introduce other relational operators

# After this lesson, it should be clear what contexts
# < > and = are appropriate in.
# drive the lesson home
=-in-unary U1U U1U;
01100100102233hear
>-in-unary U11U U1U;
0111001100102233hear
>-in-unary U111U U1U;
01110011100102233hear
>-in-unary U1111U U1U;
011100111100102233hear
<-in-unary U1U U11U;
01001001102233hear
=-in-unary U11U U11U;
0110011001102233hear
>-in-unary U111U U11U;
011100111001102233hear
>-in-unary U1111U U11U;
0111001111001102233hear
<-in-unary U1U U111U;
010010011102233hear
<-in-unary U11U U111U;
0100110011102233hear
=-in-unary U111U U111U;
011001110011102233hear
>-in-unary U1111U U111U;
01110011110011102233hear
<-in-unary U1U U1111U;
0100100111102233hear
<-in-unary U11U U1111U;
01001100111102233hear
<-in-unary U111U U1111U;
010011100111102233hear
=-in-unary U1111U U1111U;
01100111100111102233hear
>-in-unary U1U UU;
01110010002233hear
>-in-unary U111111111U U11U;
011100111111111001102233hear
>-in-unary U111111U UU;
0111001111110002233hear
>-in-unary U11U UU;
011100110002233hear
>-in-unary U11111111U U11U;
01110011111111001102233hear
>-in-unary U1111U U1U;
011100111100102233hear
>-in-unary U11U UU;
011100110002233hear
>-in-unary U1111111111U U1U;
011100111111111100102233hear
>-in-unary U111111U U1U;
01110011111100102233hear
>-in-unary U111111111U U1U;
01110011111111100102233hear
>-in-unary U1111111U U1U;
011100111111100102233hear
<-in-unary UU U1U;
010000102233hear
<-in-unary U111U U1111111111U;
010011100111111111102233hear
<-in-unary U1111U U111111111U;
010011110011111111102233hear
<-in-unary U11U U1111U;
01001100111102233hear
<-in-unary U1U U1111111U;
0100100111111102233hear
<-in-unary UU U1111111111U;
010000111111111102233hear
<-in-unary UU U11U;
0100001102233hear
<-in-unary UU U11U;
0100001102233hear
<-in-unary U1U U111U;
010010011102233hear
<-in-unary U11U U11111U;
010011001111102233hear
<-in-unary U1U U1111U;
0100100111102233hear
# switch to binary labelling for commands
= U1U U1U;
21030100102233hear
> U11U U1U;
211301100102233hear
> U111U U1U;
2113011100102233hear
> U1111U U1U;
21130111100102233hear
< U1U U11U;
21301001102233hear
= U11U U11U;
2103011001102233hear
> U111U U11U;
21130111001102233hear
> U1111U U11U;
211301111001102233hear
< U1U U111U;
213010011102233hear
< U11U U111U;
2130110011102233hear
= U111U U111U;
210301110011102233hear
> U1111U U111U;
2113011110011102233hear
< U1U U1111U;
2130100111102233hear
< U11U U1111U;
21301100111102233hear
< U111U U1111U;
213011100111102233hear
= U1111U U1111U;
21030111100111102233hear
# a few more random examples
< U111U U1111U;
213011100111102233hear
= U1111U U1111U;
21030111100111102233hear
< U1U U11111U;
21301001111102233hear
> U1111U UU;
2113011110002233hear
> U11111U U1111U;
211301111100111102233hear
< U11U U111U;
2130110011102233hear
> U11U U1U;
211301100102233hear
> U11111U U1U;
211301111100102233hear
= U111U U111U;
210301110011102233hear
= U111U U111U;
210301110011102233hear
> U1U UU;
2113010002233hear

3. introduce the NOT logical operator

intro not;
203210032233hear
= UU UU;
210300002233hear
not / < UU UU;
2100302321300002233hear
not / > UU UU;
21003023211300002233hear
= U1111U U1111U;
21030111100111102233hear
not / < U1111U U1111U;
210030232130111100111102233hear
not / > U1111U U1111U;
2100302321130111100111102233hear
= U111111U U111111U;
210301111110011111102233hear
not / < U111111U U111111U;
2100302321301111110011111102233hear
not / > U111111U U111111U;
21003023211301111110011111102233hear
= U11U U11U;
2103011001102233hear
not / < U11U U11U;
21003023213011001102233hear
not / > U11U U11U;
210030232113011001102233hear
= U111U U111U;
210301110011102233hear
not / < U111U U111U;
2100302321301110011102233hear
not / > U111U U111U;
21003023211301110011102233hear
not / = U111U U1111111111U;
210030232103011100111111111102233hear
< U111U U1111111111U;
213011100111111111102233hear
not / > U111U U1111111111U;
210030232113011100111111111102233hear
not / = U11111U U1111111U;
21003023210301111100111111102233hear
< U11111U U1111111U;
21301111100111111102233hear
not / > U11111U U1111111U;
21003023211301111100111111102233hear
not / = U1U U11U;
21003023210301001102233hear
< U1U U11U;
21301001102233hear
not / > U1U U11U;
21003023211301001102233hear
not / = UU U11111U;
2100302321030001111102233hear
< UU U11111U;
2130001111102233hear
not / > UU U11111U;
2100302321130001111102233hear
not / = U11111111U U11111111111111U;
2100302321030111111110011111111111111...hear
< U11111111U U11111111111111U;
213011111111001111111111111102233hear
not / > U11111111U U11111111111111U;
2100302321130111111110011111111111111...hear
not / = U11111111111U U111111U;
2100302321030111111111110011111102233hear
> U11111111111U U111111U;
21130111111111110011111102233hear
not / < U11111111111U U111111U;
210030232130111111111110011111102233hear
not / = U111111111111U U11U;
2100302321030111111111111001102233hear
> U111111111111U U11U;
21130111111111111001102233hear
not / < U111111111111U U11U;
210030232130111111111111001102233hear
not / = U1111111111U U1111111U;
2100302321030111111111100111111102233hear
> U1111111111U U1111111U;
21130111111111100111111102233hear
not / < U1111111111U U1111111U;
210030232130111111111100111111102233hear
not / = U1111U UU;
210030232103011110002233hear
> U1111U UU;
2113011110002233hear
not / < U1111U UU;
21003023213011110002233hear
not / = U1111111111111111U U111111111U;
2100302321030111111111111111100111111...hear
> U1111111111111111U U111111111U;
2113011111111111111110011111111102233hear
not / < U1111111111111111U U111111111U;
2100302321301111111111111111001111111...hear

4. introduce addition

intro +;
2032101032233hear
= U11U / + UU U11U;
210301100232101030001102233hear
= U11111U / + U1111U U1U;
210301111100232101030111100102233hear
= U11U / + U11U UU;
210301100232101030110002233hear
= U1111U / + UU U1111U;
2103011110023210103000111102233hear
= U1111U / + U111U U1U;
2103011110023210103011100102233hear
= U111U / + U1U U11U;
21030111002321010301001102233hear
= UU / + UU UU;
21030002321010300002233hear
= U1111U / + U1111U UU;
2103011110023210103011110002233hear
= U111U / + U11U U1U;
21030111002321010301100102233hear
= U1111U / + U1111U UU;
2103011110023210103011110002233hear

5. introduce subtraction

intro -;
2032101132233hear
= UU / - U11U U11U;
210300023210113011001102233hear
= U1111U / - U11111U U1U;
210301111002321011301111100102233hear
= U11U / - U11U UU;
210301100232101130110002233hear
= UU / - U1111U U1111U;
2103000232101130111100111102233hear
= U111U / - U1111U U1U;
2103011100232101130111100102233hear
= U1U / - U111U U11U;
21030100232101130111001102233hear
= UU / - UU UU;
21030002321011300002233hear
= U1111U / - U1111U UU;
2103011110023210113011110002233hear
= U11U / - U111U U1U;
21030110023210113011100102233hear
= U1111U / - U1111U UU;
2103011110023210113011110002233hear

6. introduce multiplication

intro *;
2032100132233hear
= UU / * UU UU;
21030002321001300002233hear
= UU / * UU U1U;
210300023210013000102233hear
= UU / * UU U11U;
2103000232100130001102233hear
= UU / * UU U111U;
21030002321001300011102233hear
= UU / * U1U UU;
210300023210013010002233hear
= U1U / * U1U U1U;
21030100232100130100102233hear
= U11U / * U1U U11U;
2103011002321001301001102233hear
= U111U / * U1U U111U;
210301110023210013010011102233hear
= UU / * U11U UU;
2103000232100130110002233hear
= U11U / * U11U U1U;
2103011002321001301100102233hear
= U1111U / * U11U U11U;
2103011110023210013011001102233hear
= U111111U / * U11U U111U;
2103011111100232100130110011102233hear
= UU / * U111U UU;
21030002321001301110002233hear
= U111U / * U111U U1U;
210301110023210013011100102233hear
= U111111U / * U111U U11U;
2103011111100232100130111001102233hear
= U111111111U / * U111U U111U;
21030111111111002321001301110011102233hear
= UU / * UU U1U;
210300023210013000102233hear
= U111U / * U111U U1U;
210301110023210013011100102233hear
= UU / * U11U UU;
2103000232100130110002233hear
= UU / * UU U111U;
21030002321001300011102233hear
= U111U / * U111U U1U;
210301110023210013011100102233hear
= U11U / * U1U U11U;
2103011002321001301001102233hear
= UU / * UU UU;
21030002321001300002233hear
= UU / * U111U UU;
21030002321001301110002233hear
= UU / * U11U UU;
2103000232100130110002233hear
= UU / * U111U UU;
21030002321001301110002233hear

7. introduce a simple form of binary notation

# After this lesson, in the higher-level version of the message,
# will expand decimal to stand for the binary notation given.
# It wouldn't be hard to accompany this lesson with a more
# formal definition once functions are introduced (below)
# so maybe the transition to binary should be delayed?
= (:) U1U;
21032130102233hear
= (:.) U11U;
2103210301102233hear
= (:..) U1111U;
2103210030111102233hear
= (:...) U11111111U;
210321000301111111102233hear
= (:....) U1111111111111111U;
210321000030111111111111111102233hear
= (.) UU;
2103203002233hear
= (:) U1U;
21032130102233hear
= (:.) U11U;
2103210301102233hear
= (::) U111U;
21032113011102233hear
= (:..) U1111U;
2103210030111102233hear
= (:.:) U11111U;
21032101301111102233hear
= (::.) U111111U;
210321103011111102233hear
= (:::) U1111111U;
2103211130111111102233hear
= (:...) U11111111U;
210321000301111111102233hear
= (:..:) U111111111U;
2103210013011111111102233hear
= (:.:.) U1111111111U;
21032101030111111111102233hear
= (:.::) U11111111111U;
210321011301111111111102233hear
= (::..) U111111111111U;
2103211003011111111111102233hear
= (::.:) U1111111111111U;
21032110130111111111111102233hear
= (:::.) U11111111111111U;
210321110301111111111111102233hear
= (::::) U111111111111111U;
2103211113011111111111111102233hear
= (.) UU;
2103203002233hear
= (:::) U1111111U;
2103211130111111102233hear
= (::.:) U1111111111111U;
21032110130111111111111102233hear
= (:.:) U11111U;
21032101301111102233hear
= (:..:) U111111111U;
2103210013011111111102233hear
= (.) UU;
2103203002233hear
= (::) U111U;
21032113011102233hear
= (::::) U111111111111111U;
2103211113011111111111111102233hear
= (::..) U111111111111U;
2103211003011111111111102233hear
= (:.:) U11111U;
21032101301111102233hear
= (:.:) U11111U;
21032101301111102233hear
= (:..:) U111111111U;
2103210013011111111102233hear
= (:.) U11U;
2103210301102233hear
= (:) U1U;
21032130102233hear
= (::::) U111111111111111U;
2103211113011111111111111102233hear
= (:.) U11U;
2103210301102233hear
= U11111U / + U1111U U1U;
210301111100232101030111100102233hear
= (:.:) / + (:..) (:);
210321013023210103210032132233hear
= U1111111U / + U111111U U1U;
2103011111110023210103011111100102233hear
= (:::) / + (::.) (:);
210321113023210103211032132233hear
= U11111U / + U1111U U1U;
210301111100232101030111100102233hear
= (:.:) / + (:..) (:);
210321013023210103210032132233hear
= U1111U / + UU U1111U;
2103011110023210103000111102233hear
= (:..) / + (.) (:..);
210321003023210103203210032233hear
= U111111111U / + U1111111U U11U;
2103011111111100232101030111111100110...hear
= (:..:) / + (:::) (:.);
21032100130232101032111321032233hear
= U11111111111U / + U1111111U U1111U;
2103011111111111002321010301111111001...hear
= (:.::) / + (:::) (:..);
210321011302321010321113210032233hear
= U1111111111U / + U111U U1111111U;
2103011111111110023210103011100111111...hear
= (:.:.) / + (::) (:::);
21032101030232101032113211132233hear
= U111111U / + U11111U U1U;
21030111111002321010301111100102233hear
= (::.) / + (:.:) (:);
210321103023210103210132132233hear
= U1111U / * U1111U U1U;
21030111100232100130111100102233hear
= (:..) / * (:..) (:);
210321003023210013210032132233hear
= U1111U / * U1U U1111U;
21030111100232100130100111102233hear
= (:..) / * (:) (:..);
210321003023210013213210032233hear
= U1111U / * U1U U1111U;
21030111100232100130100111102233hear
= (:..) / * (:) (:..);
210321003023210013213210032233hear
= U111111U / * U11U U111U;
2103011111100232100130110011102233hear
= (::.) / * (:.) (::);
210321103023210013210321132233hear
= U111111U / * U11U U111U;
2103011111100232100130110011102233hear
= (::.) / * (:.) (::);
210321103023210013210321132233hear
= U1111U / * U11U U11U;
2103011110023210013011001102233hear
= (:..) / * (:.) (:.);
210321003023210013210321032233hear
= U111111111U / * U111U U111U;
21030111111111002321001301110011102233hear
= (:..:) / * (::) (::);
2103210013023210013211321132233hear
= U1111111111111111U / * U1111U U1111U;
2103011111111111111110023210013011110...hear
= (:....) / * (:..) (:..);
2103210000302321001321003210032233hear

8. show local assignment

assign 20 0 / = (20) 0;
211103210100320302321032210100332032233hear
assign 20 1 / = (20) 1;
211103210100321302321032210100332132233hear
assign 20 2 / = (20) 2;
2111032101003210302321032210100332103...hear
assign 21 0 / = (21) 0;
211103210101320302321032210101332032233hear
assign 21 1 / = (21) 1;
211103210101321302321032210101332132233hear
assign 21 2 / = (21) 2;
2111032101013210302321032210101332103...hear
assign 22 0 / = (22) 0;
211103210110320302321032210110332032233hear
assign 22 1 / = (22) 1;
211103210110321302321032210110332132233hear
assign 22 2 / = (22) 2;
2111032101103210302321032210110332103...hear
= 0 (assign 20 0 (20));
21032032211103210100320322101003332233hear
= 0 (assign 20 0 / 20);
210320322111032101003203023210100332233hear
= 0 / assign 20 0 / 20;
2103203023211103210100320302321010032233hear
= 20 / assign 20 0 20;
2103210100302321110321010032032101003...hear
= 5 / assign 20 0 5;
2103210130232111032101003203210132233hear
= 5 / assign 20 0 / assign 23 5 / 23;
2103210130232111032101003203023211103...hear
= 23 / assign 20 0 / assign 23 5 23;
2103210111302321110321010032030232111...hear
= 1 (assign 20 1 (20));
21032132211103210100321322101003332233hear
= 1 (assign 20 1 / 20);
210321322111032101003213023210100332233hear
= 1 / assign 20 1 / 20;
2103213023211103210100321302321010032233hear
= 20 / assign 20 1 20;
2103210100302321110321010032132101003...hear
= 5 / assign 20 1 5;
2103210130232111032101003213210132233hear
= 5 / assign 20 1 / assign 23 5 / 23;
2103210130232111032101003213023211103...hear
= 23 / assign 20 1 / assign 23 5 23;
2103210111302321110321010032130232111...hear
= 2 (assign 20 2 (20));
2103210322111032101003210322101003332233hear
= 2 (assign 20 2 / 20);
2103210322111032101003210302321010033...hear
= 2 / assign 20 2 / 20;
2103210302321110321010032103023210100...hear
= 20 / assign 20 2 20;
2103210100302321110321010032103210100...hear
= 5 / assign 20 2 5;
21032101302321110321010032103210132233hear
= 5 / assign 20 2 / assign 23 5 / 23;
2103210130232111032101003210302321110...hear
= 23 / assign 20 2 / assign 23 5 23;
2103210111302321110321010032103023211...hear
= 0 (assign 21 0 (21));
21032032211103210101320322101013332233hear
= 0 (assign 21 0 / 21);
210320322111032101013203023210101332233hear
= 0 / assign 21 0 / 21;
2103203023211103210101320302321010132233hear
= 21 / assign 21 0 21;
2103210101302321110321010132032101013...hear
= 5 / assign 21 0 5;
2103210130232111032101013203210132233hear
= 5 / assign 21 0 / assign 23 5 / 23;
2103210130232111032101013203023211103...hear
= 23 / assign 21 0 / assign 23 5 23;
2103210111302321110321010132030232111...hear
= 1 (assign 21 1 (21));
21032132211103210101321322101013332233hear
= 1 (assign 21 1 / 21);
210321322111032101013213023210101332233hear
= 1 / assign 21 1 / 21;
2103213023211103210101321302321010132233hear
= 21 / assign 21 1 21;
2103210101302321110321010132132101013...hear
= 5 / assign 21 1 5;
2103210130232111032101013213210132233hear
= 5 / assign 21 1 / assign 23 5 / 23;
2103210130232111032101013213023211103...hear
= 23 / assign 21 1 / assign 23 5 23;
2103210111302321110321010132130232111...hear
= 2 (assign 21 2 (21));
2103210322111032101013210322101013332233hear
= 2 (assign 21 2 / 21);
2103210322111032101013210302321010133...hear
= 2 / assign 21 2 / 21;
2103210302321110321010132103023210101...hear
= 21 / assign 21 2 21;
2103210101302321110321010132103210101...hear
= 5 / assign 21 2 5;
21032101302321110321010132103210132233hear
= 5 / assign 21 2 / assign 23 5 / 23;
2103210130232111032101013210302321110...hear
= 23 / assign 21 2 / assign 23 5 23;
2103210111302321110321010132103023211...hear
= 0 (assign 22 0 (22));
21032032211103210110320322101103332233hear
= 0 (assign 22 0 / 22);
210320322111032101103203023210110332233hear
= 0 / assign 22 0 / 22;
2103203023211103210110320302321011032233hear
= 22 / assign 22 0 22;
2103210110302321110321011032032101103...hear
= 5 / assign 22 0 5;
2103210130232111032101103203210132233hear
= 5 / assign 22 0 / assign 23 5 / 23;
2103210130232111032101103203023211103...hear
= 23 / assign 22 0 / assign 23 5 23;
2103210111302321110321011032030232111...hear
= 1 (assign 22 1 (22));
21032132211103210110321322101103332233hear
= 1 (assign 22 1 / 22);
210321322111032101103213023210110332233hear
= 1 / assign 22 1 / 22;
2103213023211103210110321302321011032233hear
= 22 / assign 22 1 22;
2103210110302321110321011032132101103...hear
= 5 / assign 22 1 5;
2103210130232111032101103213210132233hear
= 5 / assign 22 1 / assign 23 5 / 23;
2103210130232111032101103213023211103...hear
= 23 / assign 22 1 / assign 23 5 23;
2103210111302321110321011032130232111...hear
= 2 (assign 22 2 (22));
2103210322111032101103210322101103332233hear
= 2 (assign 22 2 / 22);
2103210322111032101103210302321011033...hear
= 2 / assign 22 2 / 22;
2103210302321110321011032103023210110...hear
= 22 / assign 22 2 22;
2103210110302321110321011032103210110...hear
= 5 / assign 22 2 5;
21032101302321110321011032103210132233hear
= 5 / assign 22 2 / assign 23 5 / 23;
2103210130232111032101103210302321110...hear
= 23 / assign 22 2 / assign 23 5 23;
2103210111302321110321011032103023211...hear
# Now for functions.
assign 20 (? 28 5) / = 5 (20 2);
2111032101003221100321110032101330232...hear
assign 32 (? 24 5) / = 5 (32 3);
2111032100000322110032110003210133023...hear
assign 28 (? 29 6) / = 6 (28 2);
2111032111003221100321110132110330232...hear
assign 30 (? 32 6) / = 6 (30 3);
2111032111103221100321000003211033023...hear
assign 25 (? 38 (38)) / = 2 (25 2);
2111032110013221100321001103221001103...hear
assign 23 (? 30 (30)) / = 3 (23 3);
2111032101113221100321111032211110333...hear
assign 25 (? 33 (33)) / = 2 (25 2);
2111032110013221100321000013221000013...hear
assign 29 (? 21 (21)) / = 3 (29 3);
2111032111013221100321010132210101333...hear
assign 25 (? 32 / + (32) 1) / = 3 (25 2);
2111032110013221100321000003023210103...hear
assign 31 (? 38 / + (38) 1) / = 4 (31 3);
2111032111113221100321001103023210103...hear
assign 35 (? 33 / + (33) 1) / = 3 (35 2);
2111032100011322110032100001302321010...hear
assign 32 (? 26 / + (26) 1) / = 4 (32 3);
2111032100000322110032110103023210103...hear
assign y (? x / + (x) 6) / = (y 6) 12;
2111032100100322110032100101302321010...hear
= ((? x / + (x) 6) 6) 12;
2103222110032100101302321010322100101...hear
assign y (? x / + (x) 4) / = (y 0) 4;
2111032100100322110032100101302321010...hear
= ((? x / + (x) 4) 0) 4;
2103222110032100101302321010322100101...hear
assign y (? x / + (x) 12) / = (y 0) 12;
2111032100100322110032100101302321010...hear
= ((? x / + (x) 12) 0) 12;
2103222110032100101302321010322100101...hear
assign y (? x / + (x) 15) / = (y 2) 17;
2111032100100322110032100101302321010...hear
= ((? x / + (x) 15) 2) 17;
2103222110032100101302321010322100101...hear
assign z (? x / ? y / + 1 / * (x) (y)) / = (z 13 4) 53;
2111032100110322110032100101302321100...hear
assign z (? x / ? y / + 1 / * (x) (y)) / = ((z 13) 4) 53;
2111032100110322110032100101302321100...hear
= ((? x / ? y / + 1 / * (x) (y)) 13 4) 53;
2103222110032100101302321100321001003...hear
= (((? x / ? y / + 1 / * (x) (y)) 13) 4) 53;
2103222211003210010130232110032100100...hear
assign z (? x / ? y / + 1 / * (x) (y)) / = (z 5 6) 31;
2111032100110322110032100101302321100...hear
assign z (? x / ? y / + 1 / * (x) (y)) / = ((z 5) 6) 31;
2111032100110322110032100101302321100...hear
= ((? x / ? y / + 1 / * (x) (y)) 5 6) 31;
2103222110032100101302321100321001003...hear
= (((? x / ? y / + 1 / * (x) (y)) 5) 6) 31;
2103222211003210010130232110032100100...hear
assign z (? x / ? y / + 1 / * (x) (y)) / = (z 7 8) 57;
2111032100110322110032100101302321100...hear
assign z (? x / ? y / + 1 / * (x) (y)) / = ((z 7) 8) 57;
2111032100110322110032100101302321100...hear
= ((? x / ? y / + 1 / * (x) (y)) 7 8) 57;
2103222110032100101302321100321001003...hear
= (((? x / ? y / + 1 / * (x) (y)) 7) 8) 57;
2103222211003210010130232110032100100...hear
assign z (? x / ? y / + 1 / * (x) (y)) / = (z 8 2) 17;
2111032100110322110032100101302321100...hear
assign z (? x / ? y / + 1 / * (x) (y)) / = ((z 8) 2) 17;
2111032100110322110032100101302321100...hear
= ((? x / ? y / + 1 / * (x) (y)) 8 2) 17;
2103222110032100101302321100321001003...hear
= (((? x / ? y / + 1 / * (x) (y)) 8) 2) 17;
2103222211003210010130232110032100100...hear
assign w (? x / ? y / ? z / = (z) / + (x) (y)) / w 15 14 29;
2111032100111322110032100101302321100...hear
assign w (? x / ? y / ? z / = (z) / + (x) (y)) / w 5 8 13;
2111032100111322110032100101302321100...hear
assign w (? x / ? y / ? z / = (z) / + (x) (y)) / w 12 15 27;
2111032100111322110032100101302321100...hear
assign w (? x / ? y / ? z / = (z) / + (x) (y)) / w 14 14 28;
2111032100111322110032100101302321100...hear
assign w (? x / ? y / ? z / = (z) / + (x) (y)) / w 8 0 8;
2111032100111322110032100101302321100...hear
assign w (? x / ? y / ? z / = (z) / + (x) (y)) / w 15 9 24;
2111032100111322110032100101302321100...hear
assign w (? x / ? y / ? z / = (z) / + (x) (y)) / w 11 15 26;
2111032100111322110032100101302321100...hear
assign w (? x / ? y / ? z / = (z) / + (x) (y)) / w 5 7 12;
2111032100111322110032100101302321100...hear

9. demonstrate existence of memory

define forty-something 42;
21101321010003210101032233hear
= 42 (forty-something);
21032101010322101000332233hear
# now introduce a function
assign square (? x / * (x) (x)) / = 0 (square 0);
2111032101001322110032100101302321001...hear
assign square (? x / * (x) (x)) / = 16 (square 4);
2111032101001322110032100101302321001...hear
assign square (? x / * (x) (x)) / = 64 (square 8);
2111032101001322110032100101302321001...hear
assign square (? x / * (x) (x)) / = 9 (square 3);
2111032101001322110032100101302321001...hear
# show that functions can be remembered across statements
define square / ? x / * (x) (x);
2110132101001302321100321001013023210...hear
= (square 5) 25;
210322101001321013321100132233hear
= (square 0) 0;
210322101001320332032233hear
= (square 1) 1;
210322101001321332132233hear
= (square 9) 81;
210322101001321001332101000132233hear
define plusone / ? x / + (x) 1;
2110132101010302321100321001013023210...hear
= (plusone 7) 8;
21032210101032111332100032233hear
= (plusone 3) 4;
210322101010321133210032233hear
= (plusone 3) 4;
210322101010321133210032233hear
= (plusone 5) 6;
2103221010103210133211032233hear

10. use equality for truth values

= (= U11U U11U) (> U1111U U11U);
21032210301100110322113011110011032233hear
= (= U1U U1U) (> U111111U U1111U);
2103221030100103221130111111001111032233hear
= (< U111U U1111U) (= U11111U U11111U);
2103221301110011110322103011111001111...hear
= (= U111U U111U) (= U1111U U1111U);
2103221030111001110322103011110011110...hear
= (= U111U U111U) (= UU UU);
2103221030111001110322103000032233hear
= (< U111111U U11U) (< U1111U U11U);
2103221301111110011032213011110011032233hear
= (< U1111U U1U) (> UU UU);
21032213011110010322113000032233hear
= (> UU U11111U) (= U111U U11U);
21032211300011111032210301110011032233hear
= (> U11U U111U) (> U1111U U11111U);
2103221130110011103221130111100111110...hear
= (> U11U U111111U) (> U1U U111111U);
2103221130110011111103221130100111111...hear
not / = (> U11U U111U) (< U1U U1111U);
2100302321032211301100111032213010011...hear
not / = (= U1111U U111U) (< U1U U11U);
2100302321032210301111001110322130100...hear
not / = (= U11111U U1111U) (< U11U U1111U);
2100302321032210301111100111103221301...hear
not / = (> U1111U U111111U) (= U111U U111U);
2100302321032211301111001111110322103...hear
not / = (= U111U U1U) (> U1111U U1U);
2100302321032210301110010322113011110...hear
not / = (< U111U U111111U) (< U111111U U11U);
2100302321032213011100111111032213011...hear
not / = (= U11U U11U) (> U11U U11111U);
2100302321032210301100110322113011001...hear
not / = (= U11111U U11111U) (< U111111U U11U);
2100302321032210301111100111110322130...hear
not / = (= U111U U111U) (< U1111U U111U);
2100302321032210301110011103221301111...hear
not / = (> U11111U U11U) (< U11111U U1111U);
2100302321032211301111100110322130111...hear
# This could all be simplified or removed
# once the handling of true/false stabilizes
define true 1;
211013210101132132233hear
define false 0;
211013210110032032233hear
= (true) (= U1U U1U);
210322101011332210301001032233hear
= (true) (= UU UU);
2103221010113322103000032233hear
= (true) (> U1111111U U11111U);
2103221010113322113011111110011111032233hear
= (true) (= U11111U U11111U);
21032210101133221030111110011111032233hear
= (true) (= U1111U U1111U);
210322101011332210301111001111032233hear
= (< U11111U U111111U) (true);
21032213011111001111110322101011332233hear
= (= U11111U U11111U) (true);
21032210301111100111110322101011332233hear
= (> U1111111U U11111U) (true);
2103221130111111100111110322101011332233hear
= (= U11U U11U) (true);
21032210301100110322101011332233hear
= (< U111U U111111U) (true);
210322130111001111110322101011332233hear
= (false) (< U11111U UU);
21032210110033221301111100032233hear
= (false) (= U11U U111U);
210322101100332210301100111032233hear
= (false) (< U111111U U11U);
21032210110033221301111110011032233hear
= (false) (> U1U U11U);
2103221011003322113010011032233hear
= (false) (> U11U U11111U);
21032210110033221130110011111032233hear
= (= U1111U U111U) (false);
21032210301111001110322101100332233hear
= (= UU U1U) (false);
21032210300010322101100332233hear
= (< U111111U U111U) (false);
210322130111111001110322101100332233hear
= (= U111U UU) (false);
2103221030111000322101100332233hear
= (= U1111U U111U) (false);
21032210301111001110322101100332233hear
= (true) (true);
2103221010113322101011332233hear
= (false) (false);
2103221011003322101100332233hear
not / = (true) (false);
210030232103221010113322101100332233hear
not / = (false) (true);
210030232103221011003322101011332233hear

11. show mechanisms for branching

intro if;
2032111132233hear
= 28 / if (< 3 0) 24 28;
2103211100302321111322132113203321100...hear
= 27 / if (> 2 4) 29 27;
2103211011302321111322113210321003321...hear
= 29 / if (= 3 1) 20 29;
2103211101302321111322103211321332101...hear
= 21 / if (= 0 0) 21 26;
2103210101302321111322103203203321010...hear
= 29 / if (> 5 3) 29 23;
2103211101302321111322113210132113321...hear
= 26 / if (> 1 0) 26 22;
2103211010302321111322113213203321101...hear
= 21 / if (= 3 3) 21 27;
2103210101302321111322103211321133210...hear
= 23 / if (> 4 4) 25 23;
2103210111302321111322113210032100332...hear
define max / ? x / ? y / if (> (x) (y)) (x) (y);
2110132101101302321100321001013023211...hear
define min / ? x / ? y / if (< (x) (y)) (x) (y);
2110132101110302321100321001013023211...hear
= 0 / max 0 0;
2103203023210110132032032233hear
= 0 / min 0 0;
2103203023210111032032032233hear
= 1 / max 0 1;
2103213023210110132032132233hear
= 0 / min 0 1;
2103203023210111032032132233hear
= 2 / max 0 2;
210321030232101101320321032233hear
= 0 / min 0 2;
21032030232101110320321032233hear
= 1 / max 1 0;
2103213023210110132132032233hear
= 0 / min 1 0;
2103203023210111032132032233hear
= 1 / max 1 1;
2103213023210110132132132233hear
= 1 / min 1 1;
2103213023210111032132132233hear
= 2 / max 1 2;
210321030232101101321321032233hear
= 1 / min 1 2;
21032130232101110321321032233hear
= 2 / max 2 0;
210321030232101101321032032233hear
= 0 / min 2 0;
21032030232101110321032032233hear
= 2 / max 2 1;
210321030232101101321032132233hear
= 1 / min 2 1;
21032130232101110321032132233hear
= 2 / max 2 2;
2103210302321011013210321032233hear
= 2 / min 2 2;
2103210302321011103210321032233hear
# need to be careful about whether 'if' is eager or lazy
# here we suggest that it is lazy
define factorial / ? n / if (< (n) 1) 1 / * (n) / factorial / - (n) 1;
2110132101111302321100321100003023211...hear
= 1 / factorial 1;
2103213023210111132132233hear
= 2 / factorial 2;
210321030232101111321032233hear
= 6 / factorial 3;
2103211030232101111321132233hear
= 24 / factorial 4;
2103211000302321011113210032233hear
= 120 / factorial 5;
210321111000302321011113210132233hear

12. introduce the AND logical operator

intro and;
203210132233hear
define and (? x / ? y / if (x) (if (y) (true) (false)) (false));
2110132101322110032100101302321100321...hear
and (= U11U U11U) (> U1111U U11U);
210132210301100110322113011110011032233hear
and (= U1U U1U) (> U111111U U1111U);
2101322103010010322113011111100111103...hear
and (< U111U U1111U) (= U11111U U11111U);
2101322130111001111032210301111100111...hear
and (= U111U U111U) (= U1111U U1111U);
2101322103011100111032210301111001111...hear
and (= U111U U111U) (= UU UU);
21013221030111001110322103000032233hear
and (< U11111U U1111111U) (> U11111U U111U);
2101322130111110011111110322113011111...hear
and (> U11111U U1111U) (> U1U UU);
210132211301111100111103221130100032233hear
and (> U111U UU) (= U111U U111U);
21013221130111000322103011100111032233hear
and (< U111U U1111U) (< U111U U111111U);
2101322130111001111032213011100111111...hear
and (> U11111U U1111U) (> U11111U U1111U);
2101322113011111001111032211301111100...hear
not / and (> U111111U U1111U) (< U111U U1U);
2100302321013221130111111001111032213...hear
not / and (> U111U U1U) (> U111U U111U);
2100302321013221130111001032211301110...hear
not / and (= UU UU) (= U11111U U1111U);
2100302321013221030000322103011111001...hear
not / and (< U11U U1111U) (> U1111U U111111U);
2100302321013221301100111103221130111...hear
not / and (= U111U U111U) (= U111U U1U);
2100302321013221030111001110322103011...hear
not / and (> U1U U11111U) (< U111U U111111U);
2100302321013221130100111110322130111...hear
not / and (< U111111U U11U) (= U11U U11U);
2100302321013221301111110011032210301...hear
not / and (> U11U U11111U) (= U11111U U11111U);
2100302321013221130110011111032210301...hear
not / and (< U111111U U11U) (= U111U U111U);
2100302321013221301111110011032210301...hear
not / and (< U1111U U111U) (> U11111U U11U);
2100302321013221301111001110322113011...hear
not / and (< U11111U U1111U) (= U1U U11U);
2100302321013221301111100111103221030...hear
not / and (< U111111U U1111U) (= U11111U U1U);
2100302321013221301111110011110322103...hear
not / and (> U11U U111111U) (= U1U U11111U);
2100302321013221130110011111103221030...hear
not / and (< U111111U U111U) (= U11U U111U);
2100302321013221301111110011103221030...hear
not / and (< U111111U U1111U) (> UU U1U);
2100302321013221301111110011110322113...hear
not / and (= U111U U11111U) (< U1111U U1U);
2100302321013221030111001111103221301...hear
not / and (= U1111U U1U) (< U1111U U11U);
2100302321013221030111100103221301111...hear
not / and (< U111111U U111U) (= U111U UU);
2100302321013221301111110011103221030...hear
not / and (< U1111U U11U) (< U1111U U111111U);
2100302321013221301111001103221301111...hear
not / and (> U1111U U1U) (< U11111U U11U);
2100302321013221130111100103221301111...hear
not / and (> UU U1U) (> U1111111U U11111U);
2100302321013221130001032211301111111...hear
not / and (< U111U U1111U) (> U111U U111111U);
2100302321013221301110011110322113011...hear
not / and (> U1U U11U) (> U111111U U1111U);
2100302321013221130100110322113011111...hear
not / and (< UU U1U) (= U1111U U11111U);
2100302321013221300010322103011110011...hear
and (< U1111U U111111U) (< U11111U U1111111U);
2101322130111100111111032213011111001...hear

13. introduce the OR logical operator

define or (? x / ? y / if (x) (true) (if (y) (true) (false)));
2110132110322110032100101302321100321...hear
intro or;
203211032233hear
or (= U11U U11U) (> U1111U U11U);
211032210301100110322113011110011032233hear
or (= U1U U1U) (> U111111U U1111U);
2110322103010010322113011111100111103...hear
or (< U111U U1111U) (= U11111U U11111U);
2110322130111001111032210301111100111...hear
or (= U111U U111U) (= U1111U U1111U);
2110322103011100111032210301111001111...hear
or (= U111U U111U) (= UU UU);
21103221030111001110322103000032233hear
or (< U11111U U1111111U) (> U11111U U111U);
2110322130111110011111110322113011111...hear
or (> U11111U U1111U) (> U1U UU);
211032211301111100111103221130100032233hear
or (> U111U UU) (= U111U U111U);
21103221130111000322103011100111032233hear
or (< U111U U1111U) (< U111U U111111U);
2110322130111001111032213011100111111...hear
or (> U11111U U1111U) (> U11111U U1111U);
2110322113011111001111032211301111100...hear
or (> U111111U U1111U) (< U111U U1U);
2110322113011111100111103221301110010...hear
or (> U111U U1U) (> U111U U111U);
211032211301110010322113011100111032233hear
or (= UU UU) (= U11111U U1111U);
21103221030000322103011111001111032233hear
or (< U11U U1111U) (> U1111U U111111U);
2110322130110011110322113011110011111...hear
or (= U111U U111U) (= U111U U1U);
211032210301110011103221030111001032233hear
or (> U1U U11111U) (< U111U U111111U);
2110322113010011111032213011100111111...hear
or (< U111111U U11U) (= U11U U11U);
2110322130111111001103221030110011032233hear
or (> U11U U11111U) (= U11111U U11111U);
2110322113011001111103221030111110011...hear
or (< U111111U U11U) (= U111U U111U);
2110322130111111001103221030111001110...hear
or (< U1111U U111U) (> U11111U U11U);
2110322130111100111032211301111100110...hear
not / or (< U11111U U1111U) (= U1U U11U);
2100302321103221301111100111103221030...hear
not / or (< U111111U U1111U) (= U11111U U1U);
2100302321103221301111110011110322103...hear
not / or (> U11U U111111U) (= U1U U11111U);
2100302321103221130110011111103221030...hear
not / or (< U111111U U111U) (= U11U U111U);
2100302321103221301111110011103221030...hear
not / or (< U111111U U1111U) (> UU U1U);
2100302321103221301111110011110322113...hear
not / or (= U111U U11111U) (< U1111U U1U);
2100302321103221030111001111103221301...hear
not / or (= U1111U U1U) (< U1111U U11U);
2100302321103221030111100103221301111...hear
not / or (< U111111U U111U) (= U111U UU);
2100302321103221301111110011103221030...hear
or (< U1111U U11U) (< U1111U U111111U);
2110322130111100110322130111100111111...hear
or (> U1111U U1U) (< U11111U U11U);
2110322113011110010322130111110011032233hear
or (> UU U1U) (> U1111111U U11111U);
2110322113000103221130111111100111110...hear
or (< U111U U1111U) (> U111U U111111U);
2110322130111001111032211301110011111...hear
or (> U1U U11U) (> U111111U U1111U);
2110322113010011032211301111110011110...hear
or (< UU U1U) (= U1111U U11111U);
21103221300010322103011110011111032233hear
or (< U1111U U111111U) (< U11111U U1111111U);
2110322130111100111111032213011111001...hear
define >= (? x / ? y / or (> (x) (y)) (= (x) (y)));
2110132110001322110032100101302321100...hear
define <= (? x / ? y / or (< (x) (y)) (= (x) (y)));
2110132110010322110032100101302321100...hear
>= 0 0;
211000132032032233hear
<= 0 0;
211001032032032233hear
not / >= 0 1;
21003023211000132032132233hear
<= 0 1;
211001032032132233hear
not / >= 0 2;
210030232110001320321032233hear
<= 0 2;
2110010320321032233hear
>= 1 0;
211000132132032233hear
not / <= 1 0;
21003023211001032132032233hear
>= 1 1;
211000132132132233hear
<= 1 1;
211001032132132233hear
not / >= 1 2;
210030232110001321321032233hear
<= 1 2;
2110010321321032233hear
>= 2 0;
2110001321032032233hear
not / <= 2 0;
210030232110010321032032233hear
>= 2 1;
2110001321032132233hear
not / <= 2 1;
210030232110010321032132233hear
>= 2 2;
21100013210321032233hear
<= 2 2;
21100103210321032233hear

14. illustrate pairs

define cons (? x / ? y / ? f / f (x) (y));
2110132101013221100321001013023211003...hear
define car (? pair / pair (? x / ? y / x));
2110132101103221100321101003023211010...hear
define cdr (? pair / pair (? x / ? y / y));
2110132101113221100321101003023211010...hear
assign x (cons 0 4) / = (car / x) 0;
2111032100101322101013203210033023210...hear
assign x (cons 0 4) / = (cdr / x) 4;
2111032100101322101013203210033023210...hear
assign x (cons 6 2) / = (car / x) 6;
2111032100101322101013211032103302321...hear
assign x (cons 6 2) / = (cdr / x) 2;
2111032100101322101013211032103302321...hear
assign x (cons 3 9) / = (car / x) 3;
2111032100101322101013211321001330232...hear
assign x (cons 3 9) / = (cdr / x) 9;
2111032100101322101013211321001330232...hear
assign x (cons 7 / cons 10 2) / = (car / x) 7;
2111032100101322101013211130232101013...hear
assign x (cons 7 / cons 10 2) / = (car / cdr / x) 10;
2111032100101322101013211130232101013...hear
assign x (cons 7 / cons 10 2) / = (cdr / cdr / x) 2;
2111032100101322101013211130232101013...hear
assign x (cons 1 / cons 15 17) / = (car / x) 1;
2111032100101322101013213023210101321...hear
assign x (cons 1 / cons 15 17) / = (car / cdr / x) 15;
2111032100101322101013213023210101321...hear
assign x (cons 1 / cons 15 17) / = (cdr / cdr / x) 17;
2111032100101322101013213023210101321...hear
assign x (cons 8 / cons 14 9) / = (car / x) 8;
2111032100101322101013210003023210101...hear
assign x (cons 8 / cons 14 9) / = (car / cdr / x) 14;
2111032100101322101013210003023210101...hear
assign x (cons 8 / cons 14 9) / = (cdr / cdr / x) 9;
2111032100101322101013210003023210101...hear
assign x (cons 3 / cons 0 / cons 2 / cons 4 1) / and (= 3 / car / x) / and (= 0 / car / cdr / x) / and (= 2 / car / cdr / cdr / x) / and (= 4 / car / cdr / cdr / cdr / x) (= 1 / cdr / cdr / cdr / cdr / x);
2111032100101322101013211302321010132...hear

15. introduce mutable objects, and side-effects

intro make-cell;
20321101132233hear
intro set!;
20321110032233hear
intro get!;
20321110132233hear
define demo-mut1 / make-cell 0;
2110132110101302321101132032233hear
set! (demo-mut1) 15;
211100322110101332111132233hear
= (get! / demo-mut1) 15;
2103221110130232110101332111132233hear
set! (demo-mut1) 5;
21110032211010133210132233hear
set! (demo-mut1) 7;
21110032211010133211132233hear
= (get! / demo-mut1) 7;
210322111013023211010133211132233hear
define demo-mut2 / make-cell 11;
2110132110110302321101132101132233hear
= (get! / demo-mut2) 11;
2103221110130232110110332101132233hear
set! (demo-mut2) 22;
2111003221101103321011032233hear
= (get! / demo-mut2) 22;
21032211101302321101103321011032233hear
= (get! / demo-mut1) 7;
210322111013023211010133211132233hear
= (+ (get! / demo-mut1) (get! / demo-mut2)) 29;
2103221010322111013023211010133221110...hear
if (= (get! / demo-mut1) 7) (set! (demo-mut1) 88) (set! (demo-mut1) 99);
2111132210322111013023211010133211133...hear
= (get! / demo-mut1) 88;
2103221110130232110101332101100032233hear
if (= (get! / demo-mut1) 7) (set! (demo-mut1) 88) (set! (demo-mut1) 99);
2111132210322111013023211010133211133...hear
= (get! / demo-mut1) 99;
2103221110130232110101332110001132233hear

16. illustrate lists and some list operators

# to make list describable as a function, need to preceed lists
# ... with an argument count
# Lists keep an explicit record of their length
# this is to avoid the need for using a special 'nil' symbol
# ... which cannot itself be placed in the list.
# pending: should introduce number? check function
define list-helper / ? n / ? ret / if (> (n) 1) (? x / list-helper (- (n) 1) (? y / ? z / ret (+ 1 (y)) (cons (x) (z)))) (? x / ret 1 (x));
2110132110111302321100321100003023211...hear
define list / ? n / if (= (n) 0) (cons 0 0) (list-helper (n) (? y / ? z / cons (y) (z)));
2110132111001302321100321100003023211...hear
define head / ? lst / if (= (car / lst) 0) (undefined) (if (= (car / lst) 1) (cdr / lst) (car / cdr / lst));
2110132111010302321100321110113023211...hear
define tail / ? lst / if (= (car / lst) 0) (undefined) (if (= (car / lst) 1) (cons 0 0) (cons (- (car / lst) 1) (cdr / cdr / lst)));
2110132111100302321100321110113023211...hear
define list-length / ? lst / car / lst;
2110132111101302321100321110113023210...hear
define list-ref / ? lst / ? n / if (= (list-ref / lst) 0) (undefined) (if (= (n) 0) (head / lst) (list-ref (tail / lst) (- (n) 1)));
2110132111110302321100321110113023211...hear
define prepend / ? x / ? lst / if (= (list-length / lst) 0) (cons 1 (x)) (cons (+ (list-length / lst) 1) (cons (x) (cdr / lst)));
2110132111111302321100321001013023211...hear
define equal / ? x / ? y / if (= (number? (x)) (number? (y))) (if (number? (x)) (= (x) (y)) (list= (x) (y))) (false);
2110132100030232110032100101302321100...hear
define list= / ? x / ? y / if (= (list-length / x) (list-length / y)) (if (> (list-length / x) 0) (and (equal (head / x) (head / y)) (list= (tail / x) (tail / y))) (true)) (false);
2110132100000030232110032100101302321...hear
= (list-length / (list 0)) 0;
2103221111013023221110013203332032233hear
= (list-length / (list 4) 6 1 0 4) 4;
2103221111013023221110013210033211032...hear
= (list-length / (list 6) 6 2 7 0 9 4) 6;
2103221111013023221110013211033211032...hear
= (list-length / (list 2) 4 9) 2;
2103221111013023221110013210332100321...hear
= (list-length / (list 3) 6 1 7) 3;
2103221111013023221110013211332110321...hear
= (head / (list 6) 12 11 10 4 1 5) 12;
2103221110103023221110013211033211003...hear
list= (tail / (list 6) 12 11 10 4 1 5) ((list 5) 11 10 4 1 5);
2100000032211110030232211100132110332...hear
= (head / (list 8) 15 13 12 7 10 11 13 18) 15;
2103221110103023221110013210003321111...hear
list= (tail / (list 8) 15 13 12 7 10 11 13 18) ((list 7) 13 12 7 10 11 13 18);
2100000032211110030232211100132100033...hear
= (head / (list 2) 11 1) 11;
2103221110103023221110013210332101132...hear
list= (tail / (list 2) 11 1) ((list 1) 1);
2100000032211110030232211100132103321...hear
= (head / (list 6) 5 19 4 16 6 11) 5;
2103221110103023221110013211033210132...hear
list= (tail / (list 6) 5 19 4 16 6 11) ((list 5) 19 4 16 6 11);
2100000032211110030232211100132110332...hear
= (head / (list 10) 12 18 7 4 9 18 6 16 6 18) 12;
2103221110103023221110013210103321100...hear
list= (tail / (list 10) 12 18 7 4 9 18 6 16 6 18) ((list 9) 18 7 4 9 18 6 16 6 18);
2100000032211110030232211100132101033...hear
= (head / (list 6) 19 7 3 10 19 13) 19;
2103221110103023221110013211033210011...hear
list= (tail / (list 6) 19 7 3 10 19 13) ((list 5) 7 3 10 19 13);
2100000032211110030232211100132110332...hear
= (head / (list 6) 19 7 19 12 16 13) 19;
2103221110103023221110013211033210011...hear
list= (tail / (list 6) 19 7 19 12 16 13) ((list 5) 7 19 12 16 13);
2100000032211110030232211100132110332...hear
= (head / (list 1) 3) 3;
2103221110103023221110013213321133211...hear
list= (tail / (list 1) 3) ((list 0));
2100000032211110030232211100132133211...hear
= (head / (list 3) 2 19 17) 2;
2103221110103023221110013211332103210...hear
list= (tail / (list 3) 2 19 17) ((list 2) 19 17);
2100000032211110030232211100132113321...hear
= (head / (list 7) 1 16 5 14 6 19 2) 1;
2103221110103023221110013211133213210...hear
list= (tail / (list 7) 1 16 5 14 6 19 2) ((list 6) 16 5 14 6 19 2);
2100000032211110030232211100132111332...hear
= (list-ref ((list 3) 18 14 17) 1) 14;
2103221111103222111001321133210010321...hear
= (list-ref ((list 3) 8 11 10) 2) 10;
2103221111103222111001321133210003210...hear
= (list-ref ((list 8) 15 0 4 9 9 2 10 17) 3) 9;
2103221111103222111001321000332111132...hear
= (list-ref ((list 7) 4 8 8 5 14 5 13) 4) 14;
2103221111103222111001321113321003210...hear
= (list-ref ((list 4) 1 4 7 18) 2) 7;
2103221111103222111001321003321321003...hear
= (list-ref ((list 3) 12 2 3) 1) 2;
2103221111103222111001321133211003210...hear
= (list-ref ((list 6) 12 5 7 15 7 16) 2) 7;
2103221111103222111001321103321100321...hear
= (list-ref ((list 8) 5 15 7 14 7 1 11 19) 0) 5;
2103221111103222111001321000332101321...hear
= (list-ref ((list 3) 19 17 8) 2) 8;
2103221111103222111001321133210011321...hear
= (list-ref ((list 4) 10 10 4 11) 1) 10;
2103221111103222111001321003321010321...hear
list= ((list 0)) ((list 0));
2100000032221110013203332221110013203...hear
list= ((list 1) 4) ((list 1) 4);
2100000032221110013213321003322211100...hear
list= ((list 2) 7 5) ((list 2) 7 5);
2100000032221110013210332111321013322...hear
list= ((list 3) 15 13 11) ((list 3) 15 13 11);
2100000032221110013211332111132110132...hear
list= ((list 4) 2 8 0 6) ((list 4) 2 8 0 6);
2100000032221110013210033210321000320...hear
# this next batch of examples are a bit misleading, should streamline
not / list= ((list 0)) ((list 1) 9);
2100302321000000322211100132033322211...hear
not / list= ((list 0)) ((list 1) 5);
2100302321000000322211100132033322211...hear
not / list= ((list 1) 18) ((list 2) 8 18);
2100302321000000322211100132133210010...hear
not / list= ((list 1) 18) ((list 2) 18 5);
2100302321000000322211100132133210010...hear
not / list= ((list 2) 11 18) ((list 3) 7 11 18);
2100302321000000322211100132103321011...hear
not / list= ((list 2) 11 18) ((list 3) 11 18 6);
2100302321000000322211100132103321011...hear
not / list= ((list 3) 7 19 17) ((list 4) 6 7 19 17);
2100302321000000322211100132113321113...hear
not / list= ((list 3) 7 19 17) ((list 4) 7 19 17 0);
2100302321000000322211100132113321113...hear
not / list= ((list 4) 10 0 11 1) ((list 5) 0 10 0 11 1);
2100302321000000322211100132100332101...hear
not / list= ((list 4) 10 0 11 1) ((list 5) 10 0 11 1 8);
2100302321000000322211100132100332101...hear
# some helpful functions
list= (prepend 8 ((list 0))) ((list 1) 8);
2100000032211111132100032221110013203...hear
list= (prepend 11 ((list 1) 8)) ((list 2) 11 8);
2100000032211111132101132221110013213...hear
list= (prepend 13 ((list 2) 1 12)) ((list 3) 13 1 12);
2100000032211111132110132221110013210...hear
list= (prepend 0 ((list 3) 7 7 5)) ((list 4) 0 7 7 5);
2100000032211111132032221110013211332...hear
list= (prepend 16 ((list 4) 16 0 19 3)) ((list 5) 16 16 0 19 3);
2100000032211111132100003222111001321...hear
list= (prepend 10 ((list 5) 5 6 7 9 10)) ((list 6) 10 5 6 7 9 10);
2100000032211111132101032221110013210...hear
list= (prepend 19 ((list 6) 3 19 18 6 10 16)) ((list 7) 19 3 19 18 6 10 16);
2100000032211111132100113222111001321...hear
list= (prepend 19 ((list 7) 17 17 10 1 18 12 14)) ((list 8) 19 17 17 10 1 18 12 14);
2100000032211111132100113222111001321...hear
define pair / ? x / ? y / (list 2) (x) (y);
2110132110100302321100321001013023211...hear
define first / ? lst / head / lst;
2110132100000130232110032111011302321...hear
define second / ? lst / head / tail / lst;
2110132100001030232110032111011302321...hear
list= (pair 3 6) ((list 2) 3 6);
2100000032211010032113211033222111001...hear
= (first / pair 3 6) 3;
2103221000001302321101003211321103321...hear
= (second / pair 3 6) 6;
2103221000010302321101003211321103321...hear
list= (pair 4 9) ((list 2) 4 9);
2100000032211010032100321001332221110...hear
= (first / pair 4 9) 4;
2103221000001302321101003210032100133...hear
= (second / pair 4 9) 9;
2103221000010302321101003210032100133...hear
list= (pair 8 3) ((list 2) 8 3);
2100000032211010032100032113322211100...hear
= (first / pair 8 3) 8;
2103221000001302321101003210003211332...hear
= (second / pair 8 3) 3;
2103221000010302321101003210003211332...hear
define list-find-helper / ? lst / ? key / ? fail / ? idx / if (= (list-length / lst) 0) (fail 0) (if (equal (head / lst) (key)) (idx) (list-find-helper (tail / lst) (key) (fail) (+ (idx) 1)));
2110132100001130232110032111011302321...hear
define list-find / ? lst / ? key / ? fail / list-find-helper (lst) (key) (fail) 0;
2110132100011130232110032111011302321...hear
define example-fail / ? x 100;
2110132100100030232110032100101321100...hear
= (list-find ((list 1) 13) 13 (example-fail)) 0;
2103221000111322211100132133211013321...hear
= (list-find ((list 10) 0 9 8 16 15 14 17 5 9 2) 15 (example-fail)) 4;
2103221000111322211100132101033203210...hear
= (list-find ((list 3) 7 4 10) 7 (example-fail)) 0;
2103221000111322211100132113321113210...hear
= (list-find ((list 6) 0 17 10 13 11 5) 17 (example-fail)) 1;
2103221000111322211100132110332032100...hear
= (list-find ((list 3) 12 9 6) 12 (example-fail)) 0;
2103221000111322211100132113321100321...hear
= (list-find ((list 7) 17 1 4 17 14 13 13) 14 (example-fail)) 4;
2103221000111322211100132111332100013...hear
= (list-find ((list 3) 2 15 2) 15 (example-fail)) 1;
2103221000111322211100132113321032111...hear
= (list-find ((list 9) 6 13 10 8 10 9 6 15 18) 13 (example-fail)) 1;
2103221000111322211100132100133211032...hear
= (list-find ((list 3) 12 16 0) 12 (example-fail)) 0;
2103221000111322211100132113321100321...hear
= (list-find ((list 1) 15) 15 (example-fail)) 0;
2103221000111322211100132133211113321...hear
= (list-find ((list 4) 2 17 11 5) 14 (example-fail)) 100;
2103221000111322211100132100332103210...hear
= (list-find ((list 6) 12 1 19 6 17 9) 2 (example-fail)) 100;
2103221000111322211100132110332110032...hear
= (list-find ((list 8) 11 6 17 8 13 10 9 16) 19 (example-fail)) 100;
2103221000111322211100132100033210113...hear

17. describe changes to the implicit interpreter to allow new special forms

define base-translate / translate;
21101321001001302321100132233hear
define translate / ? x / if (= (x) 32) 64 (base-translate / x);
2110132110013023211003210010130232111...hear
= 32 64;
2103210000032100000032233hear
= (+ 32 64) 128;
2103221010321000003210000003321000000...hear
define translate / base-translate;
21101321100130232100100132233hear
not / = 32 64;
210030232103210000032100000032233hear
= (+ 32 64) 96;
2103221010321000003210000003321100000...hear
# now can create a special form for lists
define translate / ? x / if (number? / x) (base-translate / x) (if (= (head / x) vector) (translate / prepend ((list 2) list (list-length / tail / x)) (tail / x)) (base-translate / x));
2110132110013023211003210010130232111...hear
list= (vector 1 2 3) ((list 3) 1 2 3);
2100000032210000321321032113322211100...hear
# now to desugar let expressions
define translate-with-vector / translate;
21101321001010302321100132233hear
define translate-let-form / ? x / ? body / if (= (list-length / x) 0) (translate / body) (translate-let-form (tail / x) (vector (vector ? (head / head / x) (body)) (head / tail / head / x)));
2110132100101130232110032100101302321...hear
define translate / ? x / if (number? / x) (translate-with-vector / x) (if (= (head / x) let) (translate-let-form (head / tail / x) (head / tail / tail / x)) (translate-with-vector / x));
2110132110013023211003210010130232111...hear
let ((x 20)) (= (x) 20);
2100110132221001013210100333221032210...hear
let ((x 50) (y 20)) (= (- (x) (y)) 30);
2100110132221001013211001033221001003...hear
# the is-list function is now on dubious ground
# this stuff will be replaced with typing ASAP
define is-list / ? x / not / number? / x;
2110132100111030232110032100101302321...hear
is-list / (list 2) 1 3;
2100111030232211100132103321321132233hear
is-list / (list 0);
21001110302322111001320332233hear
not / is-list 23;
2100302321001110321011132233hear
is-list / (list 3) ((list 2) 2 3) 1 (? x / + (x) 10);
2100111030232211100132113322211100132...hear

18. introduce sugar for let

# if would be good to introduce desugarings more rigorously, but for now...
# ... just a very vague sketch
intro let;
2032100110132233hear
= (let ((x 10)) (+ (x) 5)) ((? x / + (x) 5) 10);
2103221001101322210010132101033322101...hear
= (let ((x 10) (y 5)) (+ (x) (y))) (((? x / ? y / + (x) (y)) 10) 5);
2103221001101322210010132101033221001...hear

19. build up functions of several variables

= ((? x / ? y / - (x) (y)) 4 0) 4;
2103222110032100101302321100321001003...hear
= ((? x / ? y / - (x) (y)) 11 8) 3;
2103222110032100101302321100321001003...hear
= ((? x / ? y / - (x) (y)) 5 5) 0;
2103222110032100101302321100321001003...hear
= ((? x / ? y / - (x) (y)) 10 1) 9;
2103222110032100101302321100321001003...hear
= ((? x / ? y / - (x) (y)) 10 7) 3;
2103222110032100101302321100321001003...hear
define last / ? x / list-ref (x) (- (list-length / x) 1);
2110132100111130232110032100101302321...hear
define except-last / ? x / if (> (list-length / x) 1) (prepend (head / x) (except-last / tail / x)) (vector);
2110132101000030232110032100101302321...hear
# test last and except-last
= 15 (last / vector 4 5 15);
2103211113221001111302321000032100321...hear
list= (vector 4 5) (except-last / vector 4 5 15);
2100000032210000321003210133221010000...hear
intro lambda;
20321101032233hear
define prev-translate / translate;
21101321010001302321100132233hear
define translate / let ((prev (prev-translate))) (? x / if (number? / x) (prev / x) (if (= (head / x) lambda) (let ((formals (head / tail / x)) (body (head / tail / tail / x))) (if (> (list-length / formals) 0) (translate (vector lambda (except-last / formals) (vector ? (last / formals) (body)))) (translate (body)))) (prev / x)));
2110132110013023210011013222101001032...hear
# test lambda
= ((lambda (x y) (- (x) (y))) 8 3) 5;
2103222110103221001013210010033221011...hear
= ((lambda (x y) (- (x) (y))) 1 1) 0;
2103222110103221001013210010033221011...hear
= ((lambda (x y) (- (x) (y))) 10 9) 1;
2103222110103221001013210010033221011...hear
= ((lambda (x y) (- (x) (y))) 7 5) 2;
2103222110103221001013210010033221011...hear
= ((lambda (x y) (- (x) (y))) 9 8) 1;
2103222110103221001013210010033221011...hear
define apply / lambda (x y) (if (list= (y) (vector)) (x) (apply ((x) (head / y)) (tail / y)));
2110132101010030232110103221001013210...hear
= (apply (lambda (x y) (- (x) (y))) (vector 8 6)) 2;
2103221010100322110103221001013210010...hear
= (apply (lambda (x y) (- (x) (y))) (vector 5 0)) 5;
2103221010100322110103221001013210010...hear
= (apply (lambda (x y) (- (x) (y))) (vector 12 9)) 3;
2103221010100322110103221001013210010...hear
= (apply (lambda (x y) (- (x) (y))) (vector 13 8)) 5;
2103221010100322110103221001013210010...hear
= (apply (lambda (x y) (- (x) (y))) (vector 11 3)) 8;
2103221010100322110103221001013210010...hear

20. show map function for applying a function across the elements of a list

define map / lambda (p lst) (if (> (list-length / lst) 0) (prepend (p (head / lst)) (map (p) (tail / lst))) (vector));
2110132101010130232110103221010110321...hear
list= (map (? x / * (x) 2) (vector 0 8 15)) (vector 0 16 30);
2100000032210101013221100321001013023...hear
list= (map (? x / * (x) 2) (vector 12 4 0 9)) (vector 24 8 0 18);
2100000032210101013221100321001013023...hear
list= (map (? x / * (x) 2) (vector 8 9 5 7 10)) (vector 16 18 10 14 20);
2100000032210101013221100321001013023...hear
list= (map (? x / * (x) 2) (vector 10 12 19 8 3 1)) (vector 20 24 38 16 6 2);
2100000032210101013221100321001013023...hear
list= (map (? x 42) (vector 5 18 4)) (vector 42 42 42);
2100000032210101013221100321001013210...hear
list= (map (? x 42) (vector 3 10 17 11)) (vector 42 42 42 42);
2100000032210101013221100321001013210...hear
list= (map (? x 42) (vector 5 13 6 16 2)) (vector 42 42 42 42 42);
2100000032210101013221100321001013210...hear
list= (map (? x 42) (vector 9 1 19 14 6 10)) (vector 42 42 42 42 42 42);
2100000032210101013221100321001013210...hear
define crunch / lambda (p lst) (if (>= (list-length / lst) 2) (p (head / lst) (crunch (p) (tail / lst))) (if (= (list-length / lst) 1) (head / lst) (undefined)));
2110132101011130232110103221010110321...hear
= (crunch (+) (vector 5 12 2)) 19;
2103221010111322101033221000032101321...hear
= (crunch (+) (vector 11 18 1 4)) 34;
2103221010111322101033221000032101132...hear
= (crunch (+) (vector 15 13 10 12 2)) 52;
2103221010111322101033221000032111132...hear
= (crunch (+) (vector 12 6 17 15 4 10)) 64;
2103221010111322101033221000032110032...hear

21. end of part 1, start of part 2

# The following parts of the message are experimental, and not
# carefully integrated with the main body
intro part2;
2032101100032233hear

22. show an example of recursive evaluation

# skipping over a lot of definitions and desugarings
define easy-factorial / ? f / ? x / if (> (x) 0) (* (x) / f (f) (- (x) 1)) 1;
2110132101100130232110032110011302321...hear
define factorial / ? x / if (> (x) 0) (* (x) / factorial / - (x) 1) 1;
2110132101111302321100321001013023211...hear
= (easy-factorial (easy-factorial) 0) 1;
210322101100132210110013320332132233hear
= (easy-factorial (easy-factorial) 1) 1;
210322101100132210110013321332132233hear
= (easy-factorial (easy-factorial) 2) 2;
21032210110013221011001332103321032233hear
= (easy-factorial (easy-factorial) 3) 6;
210322101100132210110013321133211032233hear
= (easy-factorial (easy-factorial) 4) 24;
2103221011001322101100133210033211000...hear
= (easy-factorial (easy-factorial) 5) 120;
2103221011001322101100133210133211110...hear
= (factorial 0) 1;
210322101111320332132233hear
= (factorial 1) 1;
210322101111321332132233hear
= (factorial 2) 2;
21032210111132103321032233hear
= (factorial 3) 6;
210322101111321133211032233hear
= (factorial 4) 24;
210322101111321003321100032233hear
= (factorial 5) 120;
21032210111132101332111100032233hear

23. some pure lambda calculus definitions - optional

# these definitions are not quite what we want
# since thinking of everything as a function requires headscratching
# it would be better to use these as a parallel means of evaluation
# ... for expressions
define pure-if / ? x / ? y / ? z / x (y) (z);
2110132101101030232110032100101302321...hear
define pure-true / ? y / ? z / y;
2110132101101130232110032100100302321...hear
define pure-false / ? y / ? z / z;
2110132101110030232110032100100302321...hear
define pure-cons / ? x / ? y / ? z / pure-if (z) (x) (y);
2110132101110130232110032100101302321...hear
define pure-car / ? x / x (pure-true);
2110132101111030232110032100101302321...hear
define pure-cdr / ? x / x (pure-false);
2110132101111130232110032100101302321...hear
define zero / ? f / ? x / x;
2110132110000030232110032110011302321...hear
define one / ? f / ? x / f (x);
2110132110000130232110032110011302321...hear
define two / ? f / ? x / f (f (x));
2110132110001030232110032110011302321...hear
define succ / ? n / ? f / ? x / f ((n (f)) (x));
2110132110001130232110032110000302321...hear
define add / ? a / ? b / (a (succ)) (b);
2110132110010030232110032110010130232...hear
define mult / ? a / ? b / (a (add / b)) (zero);
2110132110011130232110032110010130232...hear
define pred / ? n / pure-cdr / (n (? p / pure-cons (succ / pure-car / p) (pure-car / p))) (pure-cons (zero) (zero));
2110132110100030232110032110000302321...hear
define is-zero / ? n / (n (? dummy / pure-false) (pure-true));
2110132110100130232110032110000302322...hear
define fixed-point / ? f / (? x / f (x (x))) (? x / f (x (x)));
2110132110101130232110032110011302322...hear
# .. but for rest of message will assume that define does fixed-point for us
# now build a link between numbers and church number functions
define unchurch / ? c / c (? x / + (x) 1) 0;
2110132110110030232110032110110130232...hear
= 0 (unchurch / zero);
2103203221101100302321100000332233hear
= 1 (unchurch / one);
2103213221101100302321100001332233hear
= 2 (unchurch / two);
21032103221101100302321100010332233hear
define church / ? x / if (= 0 (x)) (zero) (succ / church / - (x) 1);
2110132110111030232110032100101302321...hear

24. introduce universal quantifier

# really need to link with sets for true correctness
# and the examples here are REALLY sparse, need much more
intro forall;
20321001132233hear
< 5 (+ 5 1);
2132101322101032101321332233hear
< 4 (+ 4 1);
2132100322101032100321332233hear
< 3 (+ 3 1);
21321132210103211321332233hear
< 2 (+ 2 1);
21321032210103210321332233hear
< 1 (+ 1 1);
213213221010321321332233hear
< 0 (+ 0 1);
213203221010320321332233hear
forall (? x / < (x) (+ (x) 1));
2100113221100321001013023213221001013...hear
< 5 (* 5 2);
21321013221001321013210332233hear
< 4 (* 4 2);
21321003221001321003210332233hear
< 3 (* 3 2);
213211322100132113210332233hear
< 2 (* 2 2);
213210322100132103210332233hear
< 1 (* 1 2);
2132132210013213210332233hear
not / < 0 (* 0 2);
210030232132032210013203210332233hear
not / forall (? x / < (x) (* (x) 2));
2100302321001132211003210010130232132...hear

25. introduce existential quantifier

# really need to link with sets for true correctness
# and the examples here are REALLY sparse, need much more
not / = 5 (* 2 2);
2100302321032101322100132103210332233hear
= 4 (* 2 2);
21032100322100132103210332233hear
not / = 3 (* 2 2);
210030232103211322100132103210332233hear
not / = 2 (* 2 2);
210030232103210322100132103210332233hear
not / = 1 (* 2 2);
21003023210321322100132103210332233hear
not / = 0 (* 2 2);
21003023210320322100132103210332233hear
intro exists;
20321010032233hear
exists (? x / = (x) (* 2 2));
2101003221100321001013023210322100101...hear
not / = 5 (+ 5 2);
21003023210321013221010321013210332233hear
not / = 4 (+ 4 2);
21003023210321003221010321003210332233hear
not / = 3 (+ 3 2);
210030232103211322101032113210332233hear
not / = 2 (+ 2 2);
210030232103210322101032103210332233hear
not / = 1 (+ 1 2);
2100302321032132210103213210332233hear
not / = 0 (+ 0 2);
2100302321032032210103203210332233hear
not (exists (? x / = (x) (+ (x) 2)));
2100322101003221100321001013023210322...hear

26. introduce logical implication

intro =>;
2032110111132233hear
define => / ? x / ? y / not / and (x) (not / y);
2110132110111130232110032100101302321...hear
=> (true) (true);
211011113221010113322101011332233hear
not / => (true) (false);
2100302321101111322101011332210110033...hear
=> (false) (true);
211011113221011003322101011332233hear
=> (false) (false);
211011113221011003322101100332233hear
forall (? x / forall (? y / => (=> (x) (y)) (=> (not / y) (not / x))));
2100113221100321001013023210011322110...hear

27. introduce sets and set membership

intro element;
2032111000032233hear
define element / ? x / ? lst / not / = (list-find-helper (lst) (x) (? y 0) 1) 0;
2110132111000030232110032100101302321...hear
element 0 (vector 0 4 8 3 5);
2111000032032210000320321003210003211...hear
element 5 (vector 0 4 8 3 5);
2111000032101322100003203210032100032...hear
element 3 (vector 0 4 8 3 5);
2111000032113221000032032100321000321...hear
element 3 (vector 3 5 1 0 9);
2111000032113221000032113210132132032...hear
element 1 (vector 3 5 1 0 9);
2111000032132210000321132101321320321...hear
element 5 (vector 3 5 1 0 9);
2111000032101322100003211321013213203...hear
element 5 (vector 8 1 6 2 0 5);
2111000032101322100003210003213211032...hear
element 6 (vector 8 1 6 2 0 5);
2111000032110322100003210003213211032...hear
element 5 (vector 8 1 6 2 0 5);
2111000032101322100003210003213211032...hear
element 5 (vector 5 3 8 6 2 9);
2111000032101322100003210132113210003...hear
element 5 (vector 5 3 8 6 2 9);
2111000032101322100003210132113210003...hear
element 9 (vector 5 3 8 6 2 9);
2111000032100132210000321013211321000...hear
element 7 (vector 1 7 2 6 4 5);
2111000032111322100003213211132103211...hear
element 2 (vector 1 7 2 6 4 5);
2111000032103221000032132111321032110...hear
element 6 (vector 1 7 2 6 4 5);
2111000032110322100003213211132103211...hear
not / element 7 (vector 8 3 9 6);
2100302321110000321113221000032100032...hear
not / element 1 (vector 8 6 3 5 4);
2100302321110000321322100003210003211...hear
not / element 2 (vector 9 5 6);
2100302321110000321032210000321001321...hear
not / element 5 (vector 2 0 7);
2100302321110000321013221000032103203...hear
not / element 6 (vector 3 5);
2100302321110000321103221000032113210...hear
# rules for set equality
define set-subset / ? x / ? y / if (> (list-length / x) 0) (and (element (head / x) (y)) (set-subset (tail / x) (y))) (true);
2110132111000130232110032100101302321...hear
define set= / ? x / ? y / and (set-subset (x) (y)) (set-subset (y) (x));
2110132111001030232110032100101302321...hear
set= (vector 1 5 9) (vector 5 1 9);
2111001032210000321321013210013322100...hear
set= (vector 1 5 9) (vector 9 1 5);
2111001032210000321321013210013322100...hear
not / set= (vector 1 5 9) (vector 1 5);
2100302321110010322100003213210132100...hear
# let's go leave ourselves wide open to Russell's paradox
# ... by using characteristic functions
# ... since it doesn't really matter for communication purposes
# ... and so far this is just used/tested with sets of integers really
element 5 (all (? x / = (+ (x) 10) 15));
2111000032101322111103221100321001013...hear
element 3 (all (? x / = (* (x) 3) (+ (x) 6)));
2111000032113221111032211003210010130...hear
define empty-set / vector;
21101321110011302321000032233hear
element 0 (natural-set);
2111000032032211111332233hear
forall (? x / => (element (x) (natural-set)) (element (+ (x) 1) (natural-set)));
2100113221100321001013023211011113221...hear
element 1 (natural-set);
2111000032132211111332233hear
element 2 (natural-set);
21110000321032211111332233hear
element 3 (natural-set);
21110000321132211111332233hear
element 4 (natural-set);
211100003210032211111332233hear
element 5 (natural-set);
211100003210132211111332233hear
element 6 (natural-set);
211100003211032211111332233hear
element 7 (natural-set);
211100003211132211111332233hear
element 8 (natural-set);
2111000032100032211111332233hear
element 9 (natural-set);
2111000032100132211111332233hear
define boolean-set / vector (true) (false);
2110132111010030232100003221010113322...hear
element (true) (boolean-set);
2111000032210101133221110100332233hear
element (false) (boolean-set);
2111000032210110033221110100332233hear
# actually, to simplify semantics elsewhere, true and false
# are now just 0 and 1 so they are not distinct from ints
define even-natural-set / all / ? x / exists / ? y / and (element (y) (natural-set)) (= (* 2 (y)) (x));
2110132111010130232111103023211003210...hear
element 0 (natural-set);
2111000032032211111332233hear
element 0 (even-natural-set);
211100003203221110101332233hear
element 1 (natural-set);
2111000032132211111332233hear
not / element 1 (even-natural-set);
21003023211100003213221110101332233hear
element 2 (natural-set);
21110000321032211111332233hear
element 2 (even-natural-set);
2111000032103221110101332233hear
element 3 (natural-set);
21110000321132211111332233hear
not / element 3 (even-natural-set);
210030232111000032113221110101332233hear
element 4 (natural-set);
211100003210032211111332233hear
element 4 (even-natural-set);
21110000321003221110101332233hear
element 5 (natural-set);
211100003210132211111332233hear
not / element 5 (even-natural-set);
2100302321110000321013221110101332233hear
element 6 (natural-set);
211100003211032211111332233hear
element 6 (even-natural-set);
21110000321103221110101332233hear

28. introduce graph structures

define make-graph / lambda (nodes links) (pair (nodes) (links));
2110132111011030232110103221110111321...hear
define test-graph / make-graph (vector 1 2 3 4) (vector (vector 1 2) (vector 2 3) (vector 1 4));
2110132111100130232111011032210000321...hear
define graph-linked / lambda (g n1 n2) (exists / ? idx / if (and (>= (idx) 0) (< (idx) (list-length / list-ref (g) 1))) (list= (list-ref (list-ref (g) 1) (idx)) (vector (n1) (n2))) (false));
2110132111101030232110103221111011321...hear
= (graph-linked (test-graph) 1 2) (true);
2103221111010322111100133213210332210...hear
= (graph-linked (test-graph) 1 3) (false);
2103221111010322111100133213211332210...hear
= (graph-linked (test-graph) 2 4) (false);
2103221111010322111100133210321003322...hear
# 'if' is used a lot in the next definition in place of and/or
# this is because I haven't established lazy evaluation forms for and/or
# so this very inefficient algorithm completely bogs down when combined
# ... during testing with a dumb implementation for 'exists'.
define graph-linked* / lambda (g n1 n2) (if (= (n1) (n2)) (true) (if (graph-linked (g) (n1) (n2)) (true) (exists (? n3 / if (graph-linked (g) (n1) (n3)) (graph-linked* (g) (n3) (n2)) (false)))));
2110132111111030232110103221111011321...hear
= (graph-linked* (test-graph) 1 2) (true);
2103221111110322111100133213210332210...hear
= (graph-linked* (test-graph) 1 3) (true);
2103221111110322111100133213211332210...hear
= (graph-linked* (test-graph) 2 4) (false);
2103221111110322111100133210321003322...hear

29. show how to execute a sequence of instructions

intro begin;
20321000000032233hear
define prev-translate / translate;
21101321010001302321100132233hear
define reverse / ? x / if (>= (list-length / x) 1) (prepend (last / x) (reverse / except-last / x)) (x);
2110132100000013023211003210010130232...hear
# test reverse
list= (vector 1 2 3) (reverse / vector 3 2 1);
2100000032210000321321032113322100000...hear
define translate / let ((prev (prev-translate))) (? x / if (number? / x) (prev / x) (if (= (head / x) begin) (translate (vector (vector ? x (vector last (vector x))) (prepend vector (tail / x)))) (prev / x)));
2110132110013023210011013222101001032...hear
= (begin 1 7 2 4) 4;
2103221000000032132111321032100332100...hear
= (begin (set! (demo-mut1) 88) (set! (demo-mut1) 6) (get! / demo-mut1)) 6;
2103221000000032211100322110101332101...hear
= (begin (set! (demo-mut2) 88) (set! (demo-mut1) 6) (get! / demo-mut2)) 88;
2103221000000032211100322110110332101...hear
= (begin (set! (demo-mut1) 88) (set! (demo-mut1) 6) (get! / demo-mut1) 4) 4;
2103221000000032211100322110101332101...hear

30. introduce environment/hashmap structure

# this section needs a LOT more examples :-)
# note that at the time of writing (h 1 2) is same as ((h) 1 2)
define hash-add / lambda (h x y z) (if (equal (z) (x)) (y) (h (z)));
2110132100000103023211010322100000113...hear
define hash-ref / lambda (h x) (h (x));
2110132100001003023211010322100000113...hear
define hash-null / ? x / undefined;
2110132100001013023211003210010130232...hear
define hash-default / ? default / ? x / default;
2110132100001103023211003210000111302...hear
define test-hash / hash-add (hash-add (hash-null) 3 2) 4 9;
2110132100010003023210000010322100000...hear
= (hash-ref (test-hash) 4) 9;
2103221000010032210001000332100332100...hear
= (hash-ref (test-hash) 3) 2;
2103221000010032210001000332113321032233hear
= (hash-ref (test-hash) 8) (undefined);
2103221000010032210001000332100033221...hear
= (hash-ref (test-hash) 15) (undefined);
2103221000010032210001000332111133221...hear
= (hash-ref (hash-add (test-hash) 15 33) 15) 33;
2103221000010032210000010322100010003...hear
= (hash-ref (test-hash) 15) (undefined);
2103221000010032210001000332111133221...hear
define make-hash / ? x / if (list= (x) (vector)) (hash-null) (hash-add (make-hash (tail / x)) (first / head / x) (second / head / x));
2110132100010013023211003210010130232...hear
= (hash-ref (make-hash / vector (pair 3 10) (pair 2 20) (pair 1 30)) 3) 10;
2103221000010032210001001302321000032...hear
= (hash-ref (make-hash / vector (pair 3 10) (pair 2 20) (pair 1 30)) 1) 30;
2103221000010032210001001302321000032...hear

31. introduce simple mutable structures

define mutable-struct / ? lst / let ((data (map (? x / make-cell 0) (lst)))) (? key / list-ref (data) (list-find (lst) (key) (? x 0)));
2110132100010103023211003211101130232...hear
define test-struct1 / mutable-struct / vector item1 item2 item3;
2110132100011003023210001010302321000...hear
set! (test-struct1 item1) 15;
211100322100011003210001101332111132233hear
= (get! / test-struct1 item1) 15;
2103221110130232100011003210001101332...hear

32. introduce method handler wrappers

define add-method / lambda (object name method) (hash-add (object) (name) (? dummy / method / object));
2110132100100003023211010322100100013...hear
define call / ? x / x 0;
2110132100101003023211003210010130232...hear
define test-struct2 / mutable-struct / vector x y;
2110132100101013023210001010302321000...hear
set! (test-struct2 x) 10;
2111003221001010132100101332101032233hear
set! (test-struct2 y) 20;
21110032210010101321001003321010032233hear
= (get! / test-struct2 x) 10;
2103221110130232100101013210010133210...hear
= (get! / test-struct2 y) 20;
2103221110130232100101013210010033210...hear
define test-struct3 / add-method (test-struct2) sum (? self / + (get! / self x) (get! / self y));
2110132100101103023210010000322100101...hear
= (get! / test-struct3 x) 10;
2103221110130232100101103210010133210...hear
= (get! / test-struct3 y) 20;
2103221110130232100101103210010033210...hear
= (call / test-struct3 sum) 30;
2103221001010030232100101103210010111...hear
set! (test-struct3 y) 10;
2111003221001011032100100332101032233hear
= (call / test-struct3 sum) 20;
2103221001010030232100101103210010111...hear
set! (test-struct2 y) 5;
211100322100101013210010033210132233hear
= (call / test-struct3 sum) 15;
2103221001010030232100101103210010111...hear

33. introduce turing machine model

# just for fun!
define safe-tail / ? x / if (> (list-length / x) 0) (if (> (list-length / x) 1) (tail / x) (vector / vector)) (vector / vector);
2110132100110013023211003210010130232...hear
define safe-head / ? x / if (> (list-length / x) 0) (head / x) (vector);
2110132100110103023211003210010130232...hear
define tape-read / ? tape / let ((x (second / tape))) (if (> (list-length / x) 0) (head / x) (vector));
2110132100110113023211003210011100302...hear
define tape-transition / lambda (tape shift value) (if (= (shift) 1) (pair (prepend (value) (first / tape)) (safe-tail / second / tape)) (if (= (shift) 0) (pair (safe-tail / first / tape) (prepend (safe-head / first / tape) (prepend (value) (safe-tail / second / tape)))) (pair (first / tape) (prepend (value) (safe-tail / second / tape)))));
2110132100111013023211010322100111003...hear
define turing / lambda (machine current last tape) (if (= (current) (last)) (tape) (let ((next (machine (current) (tape-read / tape)))) (turing (machine) (list-ref (next) 0) (last) (tape-transition (tape) (list-ref (next) 1) (list-ref (next) 2)))));
2110132101000003023211010322101000013...hear
define make-tape / ? x / pair (vector) (x);
2110132101001003023211003210010130232...hear
define remove-trail / ? x / ? lst / if (> (list-length / lst) 0) (if (equal (last / lst) (x)) (remove-trail (x) (except-last / lst)) (lst)) (lst);
2110132101001013023211003210010130232...hear
define extract-tape / ? x / remove-trail (vector) (second / x);
2110132101001103023211003210010130232...hear
define tm-binary-increment / make-hash / vector (pair right (make-hash / vector (pair 0 (vector right 1 0)) (pair 1 (vector right 1 1)) (pair (vector) (vector inc 0 (vector))))) (pair inc (make-hash / vector (pair 0 (vector noinc 0 1)) (pair 1 (vector inc 0 0)) (pair (vector) (vector halt 2 1)))) (pair noinc (make-hash / vector (pair 0 (vector noinc 0 0)) (pair 1 (vector noinc 0 1)) (pair (vector) (vector halt 1 (vector))))) (pair halt (make-hash / vector));
2110132101001113023210001001302321000...hear
list= (extract-tape / turing (tm-binary-increment) right halt (make-tape / vector 1 0 0 1)) (vector 1 0 1 0);
2100000032210100110302321010000032210...hear
list= (extract-tape / turing (tm-binary-increment) right halt (make-tape / vector 1 1 1)) (vector 1 0 0 0);
2100000032210100110302321010000032210...hear
list= (extract-tape / turing (tm-binary-increment) right halt (make-tape / vector 1 1 1 0 0 0 1 1 1)) (vector 1 1 1 0 0 1 0 0 0);
2100000032210100110302321010000032210...hear

34. introduce simple form of typing, for ease of documentation.

# An object is simply a function that takes an argument.
# The argument is the method to call on the object.
# Types are here taken to be just the existence of a particular method,
# with that method returning an object of the appropriate type.
define make-integer
  (lambda (v)
    (lambda (x)
      (if (= (x) int)
      (v)
      0)));
2110132101011003221101032210101101332...hear
define objectify
  (? x 
     (if (number? (x))
     (make-integer (x))
     (x)));
2110132101011113221100321001013221111...hear
define instanceof
  (lambda (T t)
    (if (number? (t))
    (= (T) int)
    (not (number? ((objectify (t)) (T))))));
2110132101100003221101032210110001321...hear
# add version of lambda that allows types to be declared
define prev-translate (translate);
2110132101000132211001332233hear
define translate
  (let ((prev (prev-translate)))
    (? x
      (if (number? (x))
        (prev (x))
        (if (= (head (x)) lambda)
          (let ((formals (head (tail (x))))
                (body (head (tail (tail (x))))))
            (if (> (list-length (formals)) 0)
        (if (number? (last (formals)))
            (translate
             (vector
              lambda
              (except-last (formals))
              (vector ? (last (formals)) (body))))
            (let ((formal-name (first (last (formals))))
              (formal-type (second (last (formals)))))
              (translate
               (vector
            lambda
            (except-last (formals))
            (vector 
             ? 
             (formal-name) 
             (vector 
              let
              (vector (vector 
                   (formal-name) 
                   (vector
                    (vector objectify (vector (formal-name)))
                    (formal-type))))
              (body)))))))
        (translate (body))))
          (prev (x))))));
2110132110013221001101322210100103221...hear
# add conditional form
define prev-translate (translate);
2110132101000132211001332233hear
define translate
  (let ((prev (prev-translate)))
    (? x
      (if (number? (x))
        (prev (x))
        (if (= (head (x)) cond)
          (let ((cnd (head (tail (x))))
                (rem (tail (tail (x)))))
            (if (> (list-length (rem)) 0)
        (translate
         (vector
                  if
          (first (cnd))
          (second (cnd))
          (prepend cond (rem))))
        (translate (cnd))))
          (prev (x))))));
2110132110013221001101322210100103221...hear
= 99 (cond 99);
21032110001132210110101321100011332233hear
= 8 (cond ((true) 8) 11);
2103210003221011010132221010113321000...hear
= 11 (cond ((false) 8) 11);
2103210113221011010132221011003321000...hear
= 7 (cond ((false) 3) ((true) 7) 11);
2103211132210110101322210110033211332...hear
= 3 (cond ((true) 3) ((true) 7) 11);
2103211322101101013222101011332113322...hear
= 11 (cond ((false) 3) ((false) 7) 11);
2103210113221011010132221011003321133...hear
define remove-match 
  (lambda (test lst)
    (if (> (list-length (lst)) 0)
    (if (test (head (lst)))
        (remove-match (test) (tail (lst)))
        (prepend (head (lst)) (remove-match (test) (tail (lst)))))
    (lst)));
2110132101110003221101032210111001321...hear
define remove-element
  (lambda (x) 
    (remove-match (lambda (y) (= (y) (x)))));
2110132101110103221101032210010133221...hear
list= (vector 1 2 3 5) (remove-element 4 (vector 1 2 3 4 5));
2100000032210000321321032113210133221...hear
list= (vector 1 2 3 5) (remove-element 4 (vector 1 4 2 4 3 4 5));
2100000032210000321321032113210133221...hear
define return
  (lambda (T t)
    (let ((obj (objectify (t))))
      (obj (T))));
2110132101110113221101032210110001321...hear
define tester
  (lambda ((x int) (y int))
    (return int (+ (x) (y))));
2110132101111013221101032221001013210...hear
= 42 (tester (make-integer 10) (make-integer 32));
2103210101032210111101322101011003210...hear
= 42 (tester 10 32);
2103210101032210111101321010321000003...hear
define reflective
  (lambda (f)
    ((lambda (x)
       (f (lambda (y) ((x (x)) (y)))))
     (lambda (x)
       (f (lambda (y) ((x (x)) (y)))))));
2110132101111103221101032211001133222...hear

35. an example object -- a 2D point

define point
  (lambda (x y)
    (reflective
     (lambda (self msg)
       (cond ((= (msg) x) (x))
         ((= (msg) y) (y))
         ((= (msg) point) (self))
         ((= (msg) +) 
          (lambda ((p point))
        (point (+ (x) (p x))
               (+ (y) (p y)))))
         ((= (msg) =) 
          (lambda ((p point))
        (and (= (x) (p x))
             (= (y) (p y)))))
         0))));
2110132101111113221101032210010132100...hear
define point1 (point 1 11);
2110132110000013221011111132132101133...hear
define point2 (point 2 22);
2110132110000103221011111132103210110...hear
= 1 (point1 x);
2103213221100000132100101332233hear
= 22 (point2 y);
21032101103221100001032100100332233hear
= 11 ((point 11 12) x);
2103210113222101111113210113211003321...hear
= 11 (((point 11 12) point) x);
2103210113222210111111321011321100332...hear
= 16 (((point 16 17) point) x);
2103210000322221011111132100003210001...hear
= 33 (point1 + (point2) y);
2103210000132211000001321010322110000...hear
point1 + (point2) = (point 3 33);
2110000013210103221100001033210322101...hear
point2 + (point1) = (point 3 33);
2110000103210103221100000133210322101...hear
(point 100 200) + (point 200 100) = (point 300 300);
2210111111321100100321100100033210103...hear
instanceof point (point1);
210110000321011111132211000001332233hear
not (instanceof int (point1));
2100322101100003210101110322110000013...hear
instanceof int 5;
21011000032101011103210132233hear
not (instanceof point 5);
210032210110000321011111132101332233hear

36. an example object -- a container

define container
  (lambda (x)
    (let ((contents (make-cell (vector))))
      (reflective
       (lambda (self msg)
     (cond ((= (msg) container) (self))
           ((= (msg) inventory) (get! (contents)))
           ((= (msg) add)
        (lambda (x) 
          (if (not (element (x) (get! (contents))))
              (set! (contents) (prepend (x) (get! (contents))))
              (false))))
           ((= (msg) remove)
        (lambda (x)
          (set! (contents) (remove-element (x) (get! (contents))))))
           ((= (msg) =)
        (lambda ((c container))
          (set= (self inventory) (c inventory))))
           0)))));
2110132110000113221101032210010133221...hear
# Can pass anything to container function to create an object
# Should eventually use a consistent protocol for all objects,
# but all this stuff is still in flux
define pocket (container new);
2110132110001113221100001132110010003...hear
pocket add 77;
21100011132110010032100110132233hear
pocket add 88;
21100011132110010032101100032233hear
pocket add 99;
21100011132110010032110001132233hear
set= (pocket inventory) (vector 77 88 99);
2111001032211000111321100010133221000...hear
pocket remove 88;
211000111321100011032101100032233hear
set= (pocket inventory) (vector 77 99);
2111001032211000111321100010133221000...hear
define pocket2 (container new);
2110132110010013221100001132110010003...hear
pocket2 add 77;
21100100132110010032100110132233hear
pocket2 add 99;
21100100132110010032110001132233hear
pocket2 = (pocket);
211001001321032211000111332233hear

37. expressing inheritance

# counter-container adds one method to container: count
define counter-container
  (lambda (x)
    (let ((super (container new)))
      (reflective
       (lambda (self msg)
     (cond ((= (msg) counter-container) (self))
           ((= (msg) count) (list-length (super inventory)))
           (super (msg)))))));
2110132110010103221101032210010133221...hear
define cc1 (counter-container new);
2110132110011013221100101032110010003...hear
= 0 (cc1 count);
210320322110011013211001100332233hear
cc1 add 4;
2110011013211001003210032233hear
= 1 (cc1 count);
210321322110011013211001100332233hear
cc1 add 5;
2110011013211001003210132233hear
= 2 (cc1 count);
2103210322110011013211001100332233hear

38. adding a special form for classes

# need a bunch of extra machinery first, will push this
# back into previous sections eventually, and simplify
define list-append
  (lambda (lst1 lst2)
    (if (> (list-length (lst1)) 0)
    (list-append (except-last (lst1))
             (prepend (last (lst1)) (lst2)))
    (lst2)));
2110132110011103221101032211001111321...hear
list= (list-append (vector 1 2 3) (vector 4 5 6)) (vector 1 2 3 4 5 6);
2100000032211001110322100003213210321...hear
define append
  (? x
     (? lst
    (if (> (list-length (lst)) 0)
        (prepend (head (lst)) (append (x) (tail (lst))))
        (vector (x)))));
2110132110100013221100321001013221100...hear
list= (append 5 (vector 1 2)) (vector 1 2 5);
2100000032211010001321013221000032132...hear
define select-match 
  (lambda (test lst)
    (if (> (list-length (lst)) 0)
    (if (test (head (lst)))
        (prepend (head (lst)) (select-match (test) (tail (lst))))
        (select-match (test) (tail (lst))))
    (lst)));
2110132110100103221101032210111001321...hear
define unique
  (let ((store (make-cell 0)))
    (lambda (x)
      (let ((id (get! (store))))
    (begin
      (set! (store) (+ (id) 1))
      (id)))));
2110132110100113221001101322211010100...hear
= (unique new) 0;
210322110100113211001000332032233hear
= (unique new) 1;
210322110100113211001000332132233hear
= (unique new) 2;
2103221101001132110010003321032233hear
not (= (unique new) (unique new));
2100322103221101001132110010003322110...hear
define setup-this
  (lambda (this self)
    (if (number? / this)
    (self)
    (this)));
2110132110101103221101032211010111321...hear
# okay, here it comes.  don't panic!
# I need to split this up into helpers, and simplify.
# It basically just writes code for classes like we saw in
# a previous section.
define prev-translate (translate);
2110132101000132211001332233hear
define translate
  (let ((prev (prev-translate)))
    (? x
       (if (number? (x))
       (prev (x))
       (if (= (head (x)) class)
           (let ((name (list-ref (x) 1))
             (args (list-ref (x) 2))
             (fields (tail (tail (tail (x))))))
         (translate
          (vector
           define
           (name)
           (vector
            lambda
            (prepend ext-this (args))
            (vector
             let
             (append
              (vector unique-id (vector unique new))
              (map 
               (tail)
               (select-match (? x (= (first (x)) field)) (fields))))
             (vector
              let
              (vector
               (vector
            self
            (vector
             reflective
             (vector
              lambda
              (vector self)
              (vector
               let
               (vector 
                (vector
                 this
                 (vector setup-this 
                     (vector ext-this)
                     (vector self))))
               (vector 
                let
                (vector (vector ignore-this 1))
                (vector
                 lambda
                 (vector method)
                 (list-append
                  (prepend
                   cond
                   (list-append
                (map
                 (? x 
                    (vector
                     (vector = (vector method) (first (x)))
                     (second (x))))
                 (map (tail)
                      (select-match 
                       (? x (= (first (x)) method)) 
                       (fields))))
                (map
                 (? x 
                    (vector
                     (vector = (vector method) (x))
                     (vector (x))))
                 (map (second)
                      (select-match 
                       (? x (= (first (x)) field)) 
                       (fields))))))
                  (vector
                   (vector
                (vector = (vector method) self)
                (vector self))
                   (vector
                (vector = (vector method) (name))
                (vector self self))
                   (vector
                (vector = (vector method) classname)
                (name))
                   (vector
                (vector = (vector method) unknown)
                (vector lambda (vector x) 0))
                   (vector
                (vector = (vector method) new)
                0)
                   (vector
                (vector = (vector method) unique-id)
                (vector unique-id))
                   (vector
                (vector = (vector method) ==)
                (vector
                 lambda
                 (vector x)
                 (vector = 
                     (vector unique-id)
                     (vector x unique-id))))
                   (vector self unknown (vector method)))))))))))
              (vector 
               begin
               (vector self new)
               (vector self))))))))
           (prev (x))))));
2110132110013221001101322210100103221...hear
# revisit the point class example
class point (x y) 
       (method x (x))
       (method y (y))
       (method + (lambda ((p point))
           (point new 
              (+ (x) (p x))
              (+ (y) (p y)))))
       (method = (lambda ((p point))
           (and (= (x) (p x))
            (= (y) (p y)))));
2110110003210111111322100101321001003...hear
# note the appearance of new in the next line --
# this is the only difference to previous version
define point1 (point new 1 11);
2110132110000013221011111132110010003...hear
define point2 (point new 2 22);
2110132110000103221011111132110010003...hear
= 1 (point1 x);
2103213221100000132100101332233hear
= 22 (point2 y);
21032101103221100001032100100332233hear
= 11 ((point new 11 12) x);
2103210113222101111113211001000321011...hear
= 11 (((point new 11 12) point) x);
2103210113222210111111321100100032101...hear
= 16 (((point new 16 17) point) x);
2103210000322221011111132110010003210...hear
= 33 (point1 + (point2) y);
2103210000132211000001321010322110000...hear
point1 + (point2) = (point new 3 33);
2110000013210103221100001033210322101...hear
point2 + (point1) = (point new 3 33);
2110000103210103221100000133210322101...hear
(point new 100 200) + (point new 200 100) = (point new 300 300);
2210111111321100100032110010032110010...hear
instanceof point (point1);
210110000321011111132211000001332233hear
not (instanceof int (point1));
2100322101100003210101110322110000013...hear
# Check that virtual calls can be made to work.
# They are a little awkward right now.
# Should they be the default?
class c1 ()
       (method getid 100)
       (method altid (this getid));
2110110003211100010323221001001132111...hear
class c2 ()
       (field super-ref (make-cell 0))
       (method new (set! (super-ref) (c1 / this)))
       (method super (? x ((get! / super-ref) (x))))
       (method unknown (? x (self super / x)))
       (method getid 200);
2110110003211100101323221101110132111...hear
= 100 / c1 new altid;
2103211001003023211100010321100100032...hear
= 200 / c2 new altid;
2103211001000302321110010132110010003...hear

39. wrapper class for cells

class cell (initial-value)
       (field content (make-cell (initial-value)))
       (method get (get! (content)))
       (method set (lambda (new-value)
             (set! (content) (new-value))))
       (method reset (self set (initial-value)))
       (method unknown (lambda (x) ((objectify (self get)) (x))));
2110110003211100111322111010003322110...hear
define cell-test1 (cell new 15);
2110132111011103221110011132110010003...hear
= 15 (cell-test1 get);
210321111322111011103211101010332233hear
cell-test1 set 82;
211101110321110101132101001032233hear
= 82 (cell-test1 get);
210321010010322111011103211101010332233hear
define cell-test2 (cell new (point new 120 150));
2110132111011113221110011132110010003...hear
define cell-test3 (cell new (point new 300 300));
2110132111100003221110011132110010003...hear
cell-test2 + (cell-test3) = (point new 420 450);
2111011113210103221111000033210322101...hear
not (cell-test2 = (cell-test3));
2100322111011113210322111100003332233hear
cell-test3 set (cell-test2);
211110000321110101132211101111332233hear
cell-test2 = (cell-test3);
211101111321032211110000332233hear

40. playing around with doors and rooms

class door ((src room) (dest room))
       (method new (begin
             (src add (self))
             (dest add (self))))
       (method access-from (lambda ((current room))
                 (cond ((current == (src)) (dest))
                   ((current == (dest)) (src))
                   0)))
       (method is-present (lambda ((current room))
                (cond ((current == (src)) (true))
                  ((current == (dest)) (true))
                  (false))));
2110110003211110001322211110010321111...hear
class room (name)
       (field content (container new))
       (method name (name))
       (method unknown (lambda (x) (content (x))));
2110110003211110011322100100103322110...hear
# need to fix up containers to use object equality
define object-element
  (lambda (n lst)
    (> (list-length 
    (select-match (lambda (x) (x == (n))) (lst))) 
       0));
2110132111101113221101032211000032111...hear
class container ()
    (field contents (cell new (vector)))
    (method inventory (contents get))
    (method add (lambda (x) 
          (if (not (object-element (x) (contents get)))
              (contents set (prepend (x) (contents get)))
              (false))));
2110110003211000011323221101110132110...hear
define hall (room new 0);
2110132111110003221111001132110010003...hear
define kitchen (room new 1);
2110132111110013221111001132110010003...hear
define door1 (door new (hall) (kitchen));
2110132111110103221111000132110010003...hear
(first (hall inventory)) == (door1);
2210000013221111100032110001013332111...hear
(first (kitchen inventory)) == (door1);
2210000013221111100132110001013332111...hear
door1 access-from (hall) == (kitchen);
2111110103211110101322111110003321110...hear
not (door1 access-from (hall) == (hall));
2100322111110103211110101322111110003...hear
door1 access-from (kitchen) == (hall);
2111110103211110101322111110013321110...hear
define stairs (room new 2);
2110132111110113221111001132110010003...hear
define lawn (room new 3);
2110132111111003221111001132110010003...hear
define bedroom (room new 4);
2110132111111013221111001132110010003...hear
define nowhere (room new 0);
2110132111111103221111001132110010003...hear
define door2 (door new (hall) (lawn));
2110132111111113221111000132110010003...hear
define door3 (door new (hall) (stairs));
2110132100000000322111100013211001000...hear
define door4 (door new (stairs) (bedroom));
2110132100000001322111100013211001000...hear
class character ()
       (field location (cell new 0))
       (field name (cell new 0))
       (method set-room (lambda ((r room)) 
              (begin
                (if (not (number? / location get))
                (location get remove (self))
                0)
                (r add (self))
                (location set (r)))))
       (method get-room (location get))
       (method set-name (lambda (n) (name set / n)))
       (method get-name (name get))
       (method update 0);
2110110003210000001032322110111013210...hear
define find-max-helper
  (lambda (test max idx n lst)
    (if (> (list-length (lst)) 0)
    (if (> (test (head (lst))) (max))
        (find-max-helper (test) (test (head (lst))) (n) (+ (n) 1) (tail (lst)))
        (find-max-helper (test) (max) (idx) (+ (n) 1) (tail (lst))))
    (idx)));
2110132100001010322110103221011100132...hear
define find-max-idx
  (lambda (test lst)
    (find-max-helper (test) (test (head (lst))) 0 0 (lst)));
2110132100001011322110103221011100132...hear
define find-min-helper
  (lambda (test max idx n lst)
    (if (> (list-length (lst)) 0)
    (if (< (test (head (lst))) (max))
        (find-min-helper (test) (test (head (lst))) (n) (+ (n) 1) (tail (lst)))
        (find-min-helper (test) (max) (idx) (+ (n) 1) (tail (lst))))
    (idx)));
2110132100001100322110103221011100132...hear
define find-min-idx
  (lambda (test lst)
    (find-min-helper (test) (test (head (lst))) 0 0 (lst)));
2110132100001101322110103221011100132...hear
= 2 (find-max-idx (lambda (x) (x)) (vector 3 4 5 0));
2103210322100001011322110103221001013...hear
= 1 (find-max-idx (lambda (x) (x)) (vector 3 5 4 0));
2103213221000010113221101032210010133...hear
= 0 (find-max-idx (lambda (x) (x)) (vector 5 3 4 0));
2103203221000010113221101032210010133...hear
# the robo class makes a character that patrols from room to room
class robo ()
       (field super (character new))
       (field timestamp (cell new 1))
       (field timestamp-map (cell new (lambda (x) 0)))
       (method unknown (lambda (x) (super (x))))
       (method update 
           (let ((exits 
              (select-match (lambda (x) (instanceof door (x)))
                    (self location inventory))))
         (let ((timestamps
            (map (lambda (x) (timestamp-map get (x)))
                 (exits))))
           (let ((chosen-exit (list-ref 
                       (exits)
                       (find-min-idx (lambda (x) (x))
                             (timestamps))))
             (current-tmap (timestamp-map get))
             (current-t (timestamp get)))
             (begin
               (self location set (chosen-exit 
                       access-from 
                       (self location get)))
               (timestamp-map set 
                      (lambda ((d door))
                    (if (d == (chosen-exit))
                        (current-t)
                        (current-tmap (d)))))
               (timestamp set (+ (timestamp get) 1)))))));
2110110003210000111032322110111013211...hear
define myrobo (robo new);
2110132100010111322100001110321100100...hear
myrobo set-room (stairs);
21000101113210000010032211111011332233hear
define which-room
  (lambda ((rr robo))
    (find-max-idx 
     (lambda ((r room)) (if (r == (rr get-room)) 1 0))
     (vector (hall) (kitchen) (stairs) (lawn) (bedroom))));
2110132100011000322110103222100011001...hear
define sequencer
  (lambda (n current lst)
    (if (< (current) (n))
    (begin
      (myrobo update)
      (sequencer
       (n)
       (+ (current) 1)
       (append
        (which-room (myrobo))
        (lst))))
    (lst)));
2110132100011010322110103221100003210...hear
# here is a list of the first 30 rooms the robot character visits
# 0=hall, 1=kitchen, 2=stairs, 3=lawn, 4=bedroom
list= (sequencer 30 0 (vector)) (vector 4 2 0 3 0 1 0 2 4 2 0 3 0 1 0 2 4 2 0 3 0 1 0 2 4 2 0 3 0 1);
2100000032210001101032111103203221000...hear
# Now should start to introduce a language to talk about what is
# going on in the simulated world, and start to move away from
# detailed mechanism

41. end of part 2, start of part 3

# The following parts of the message are the beginnings
# of embedding an alternate visual primer
intro part3;
203210001101132233hear

42. simulating unless gates

# for embedded image-and-logic-based primer
# practice with pure logic gate
# X unless Y = (X if Y=0, otherwise 0)
define unless /
  ? x / ? y /
  and (x) (not (y));
2110132100011100302321100321001013023...hear
# if second input is true, output is blocked (false)
# if second input is false, output copies first input
= (false) (unless (false) (false));
2103221011003322100011100322101100332...hear
= (true) (unless (true) (false));
2103221010113322100011100322101011332...hear
= (false) (unless (false) (true));
2103221011003322100011100322101100332...hear
= (false) (unless (true) (true));
2103221011003322100011100322101011332...hear
# To do: add a simple simulator for non-grid-based
# logic -- much simpler to understand than
# grid-based
# On to a grid-based logic simulation
# first, need unbounded, mutable matrices
define make-matrix /
  ? default /
  (make-cell (hash-default (default)));
2110132100011101302321100321000011130...hear
define matrix-set /
  ? m /
  ? x /
  ? addr /
  set! (m) / hash-add (get! (m)) (addr) (x);
2110132100011110302321100321000111113...hear
define matrix-get /
  ? m /
  ? addr /
  hash-ref (get! (m)) (addr);
2110132100100001302321100321000111113...hear
define test-matrix
  (make-matrix 0);
2110132100100010322100011101320332233hear
= 0 / matrix-get (test-matrix) / vector 1 2 3;
2103203023210010000132210010001033023...hear
matrix-set (test-matrix) 10 / vector 1 2 3;
2100011110322100100010332101030232100...hear
= 10 / matrix-get (test-matrix) / vector 1 2 3;
2103210103023210010000132210010001033...hear
# go through a circuit of unless gates and analyze data flow
define unless-phase-1 /
  ? circuit /
  assign state (make-matrix (false))
  (begin
    (map 
     (? gate /
    assign x1 (list-ref (gate) 0) /
    assign y1 (list-ref (gate) 1) /
    assign x2 (list-ref (gate) 2) /
    assign y2 (list-ref (gate) 3) /
    assign v (list-ref (gate) 4) /
    (if (= (x1) (x2))
        (begin
          (matrix-set (state) (v) / vector (x2) (y2) vert-value)
          (matrix-set (state) (true) / vector (x2) (y2) vert-have)
          (matrix-set (state) (true) / vector (x1) (y1) vert-want)
          (gate))
        (begin
          (matrix-set (state) (v) / vector (x2) (y2) horiz-value)
          (matrix-set (state) (true) / vector (x2) (y2) horiz-have)
          (matrix-set (state) (true) / vector (x1) (y1) horiz-want)
          (gate))))
     (circuit))
    (state));
2110132100100011302321100321001001003...hear
# move forward one simulation step
define unless-phase-2 /
  ? circuit /
  ? state
  (map 
   (? gate /
      assign x1 (list-ref (gate) 0) /
      assign y1 (list-ref (gate) 1) /
      assign x2 (list-ref (gate) 2) /
      assign y2 (list-ref (gate) 3) /
      assign v (list-ref (gate) 4) /
      assign nv (if (= (x1) (x2))
            (if (matrix-get (state) / vector (x1) (y1) vert-have)
            (and (matrix-get (state) /
                     vector (x1) (y1) vert-value)
                 (not (and (matrix-get (state) /
                           vector (x1) (y1) horiz-value)
                       (not (matrix-get (state) /
                            vector (x1) (y1) horiz-want)))))
            (if (matrix-get (state) / vector (x1) (y1) horiz-have)
                (matrix-get (state) / vector (x1) (y1) horiz-value)
                (true)))
            (if (matrix-get (state) / vector (x1) (y1) horiz-have)
            (and (matrix-get (state) / vector (x1) (y1) horiz-value)
                 (not (and (matrix-get (state) /
                           vector (x1) (y1) vert-value)
                       (not (matrix-get (state) /
                            vector (x1) (y1) vert-want)))))
            (if (matrix-get (state) / vector (x1) (y1) vert-have)
                (matrix-get (state) / vector (x1) (y1) vert-value)
                (true)))) /
                vector (x1) (y1) (x2) (y2) (nv))
   (circuit));
2110132100110001302321100321001001003...hear
# wrap up both phases of simulation
define simulate-unless /
  ? circuit /
  assign state (unless-phase-1 (circuit)) /
  unless-phase-2 (circuit) (state);
2110132100110011302321100321001001003...hear
# A circuit is a list of gates
# Each gate is a list (x1 y1 x2 y2 v)
# where the coordinates (x1,y1) and (x2,y2) represent
# start and end points of a wire on a plane, carrying a 
# logic value v.
# Wires copy values from their start point.
#   |  
#   | (A)
#   V        
# -->-->
# (B)(C)
#
# Wire C here copies from wire B.
# If wire A is on, it blocks (sets to 0) C.
assign circuit1
    (vector
     (vector 2 2 4 2 (true))
     (vector 4 2 6 2 (true))
     (vector 6 2 8 2 (true))
     (vector 6 4 6 2 (true))) /
     assign circuit2
     (vector
      (vector 2 2 4 2 (true))
      (vector 4 2 6 2 (true))
      (vector 6 2 8 2 (false))
      (vector 6 4 6 2 (true))) /
      equal (simulate-unless (circuit1)) (circuit2);
2111032100110100322100003221000032103...hear
# okay, now let us make a simple image class
# we are going to encode each row as a single binary number,
# rather than a vector, so that images will be pretty
# obvious in the raw, uninterpreted message
define bit-get /
  lambda (n offset) /
  assign div2 (div (n) 2) 
  (if (= 0 / offset)
      (not / = (n) / * 2 / div2)
      (bit-get (div2) / - (offset) 1));
2110132100110110302321101032211000032...hear
= 0 / bit-get (::.) 0;
210320302321001101103211032032233hear
= 1 / bit-get (::.) 1;
210321302321001101103211032132233hear
= 1 / bit-get (::.) 2;
2103213023210011011032110321032233hear
= 0 / bit-get (::.) 3;
2103203023210011011032110321132233hear
= 0 / bit-get (::.) 4;
21032030232100110110321103210032233hear
= 0 / bit-get 8 0;
2103203023210011011032100032032233hear
= 0 / bit-get 8 1;
2103203023210011011032100032132233hear
= 0 / bit-get 8 2;
21032030232100110110321000321032233hear
= 1 / bit-get 8 3;
21032130232100110110321000321132233hear
define make-image /
  lambda (h w lst) /
  vector (h) (w) (lst);
2110132100111001302321101032210000011...hear
define image-get /
  lambda (image row col) /
  assign h (list-ref (image) 0) /
  assign w (list-ref (image) 1) /
  assign lst (list-ref (image) 2) /
  assign bits (list-ref (lst) (row)) /
  bit-get (bits) (- (- (w) (col)) 1);
2110132100111010302321101032210011101...hear
define image-height /
  ? image /
  list-ref (image) 0;
2110132100111111302321100321001110113...hear
define image-width /
  ? image /
  list-ref (image) 1;
2110132101000000302321100321001110113...hear
define test-image /
  make-image 3 5 /
  vector (:....) (:...:) (:....);
2110132101000001302321001110013211321...hear
= 3 (image-height / test-image);
210321132210011111130232101000001332233hear
= 5 (image-width / test-image);
2103210132210100000030232101000001332233hear
= (true) (image-get (test-image) 0 0);
2103221010113322100111010322101000001...hear
= (false) (image-get (test-image) 0 1);
2103221011003322100111010322101000001...hear
= (false) (image-get (test-image) 0 4);
2103221011003322100111010322101000001...hear
= (true) (image-get (test-image) 1 0);
2103221010113322100111010322101000001...hear
= (true) (image-get (test-image) 2 0);
2103221010113322100111010322101000001...hear
= (true) (image-get (test-image) 1 4);
2103221010113322100111010322101000001...hear
# need a way to join two lists
define merge-list /
  ? lst1 /
  ? lst2 /
  (if (> (list-length / lst1) 0)
      (prepend (head / lst1) (merge-list (tail / lst1) (lst2)))
      (lst2));
2110132101000010302321100321100111130...hear
define merge-lists /
  ? lst /
  (if (> (list-length / lst) 2)
      (merge-list (head / lst) (merge-lists / tail / lst))
      (if (= (list-length / lst) 2)
      (merge-list (head / lst) / (head / tail / lst))
      (if (= (list-length / lst) 1)
          (head / lst)
          (vector))));
2110132101000011302321100321110113023...hear
equal (vector 1 2 3 4) (merge-list (vector 1 2) (vector 3 4));
2100032210000321321032113210033221010...hear
equal (vector 1 2 3 4) (merge-lists (vector (vector 1 2) (vector 3) (vector 4)));
2100032210000321321032113210033221010...hear
# helper for pairing
define prefix /
  ? x / 
  ? lst /
  map (? y (vector (x) (y))) (lst);
2110132101000100302321100321001013023...hear
equal (vector (vector 1 10) (vector 1 11))
       (prefix 1 (vector 10 11));
2100032210000322100003213210103322100...hear
# need a way to take product of domains
define pairing /
  ? lst1 / 
  ? lst2
  (if (> (list-length / lst1) 0)
      (merge-list (prefix (head / lst1) (lst2))
          (pairing (tail / lst1) (lst2)))
      (vector));
2110132101000101302321100321100111130...hear
equal (vector (vector 1 10) (vector 1 11) (vector 2 10) (vector 2 11))
       (pairing (vector 1 2) (vector 10 11));
2100032210000322100003213210103322100...hear
# need a way to make counting sets
define count /
  ? lo / ? hi
  (if (<= (lo) (hi))
      (prepend (lo) (count (+ (lo) 1) (hi)))
      (vector));
2110132110011003023211003210100011030...hear
equal (vector 0 1 2 3 4) (count 0 4);
2100032210000320321321032113210033221...hear
# given an image of a circuit, extract a model.
# wire elements are centered on multiples of 8
# individual element...
define distill-element /
  ? image / ? xlogic / ? ylogic / ? xmid / ? ymid 
  (if (image-get (image) (ymid) (xmid))
      (assign vert (image-get (image) (+ (ymid) 4) (xmid)) /
          assign dx (if (vert) 0 1) /
          assign dy (if (vert) 1 0) /
          assign pos (image-get (image) 
                    (+ (ymid) / + (* 4 / dy) (* 2 / dx))
                    (+ (xmid) / - (* 4 / dx) (* 2 / dy))) /
          assign sgn (if (pos) 1 (- 0 1)) /
          assign dx (* (sgn) (dx)) /
          assign dy (* (sgn) (dy)) /
          assign active (image-get (image) (+ (ymid) (dx)) (- (xmid) (dy))) /
          (vector 
           (vector (- (xlogic) (dx)) 
               (- (ylogic) (dy))
               (+ (xlogic) (dx))
               (+ (ylogic) (dy))
               (active))))
      (vector));
2110132101001000302321100321001110113...hear
# full circuit...
define distill-circuit /
  ? image /
  assign h (div (image-height / image) 8) /
  assign w (div (image-width / image) 8) 
  (merge-lists
   (map (? v /
       assign xlogic (list-ref (v) 0) /
       assign ylogic (list-ref (v) 1) /
       assign xmid (* 8 / xlogic) /
       assign ymid (* 8 / ylogic) /
       distill-element (image) (xlogic) (ylogic) (xmid) (ymid))
    (pairing (count 1 (- (w) 1))
         (count 1 (- (h) 1)))));
2110132101010011302321100321001110113...hear

43. testing alternate primer based on gates: cos_not circuit

# This section contains one or more representations of a circuit
# constructed using UNLESS gates.
define cos_not_gate / vector 
  (vector 0 6 2 6 (true))
  (vector 2 6 4 6 (true))
  (vector 4 6 6 6 (true))
  (vector 6 6 8 6 (true))
  (vector 8 4 8 6 (true))
  (vector 8 6 8 8 (false))
  (vector 8 8 10 8 (false))
  (vector 10 8 12 8 (false))
  (vector 12 8 12 6 (false))
  (vector 12 6 14 6 (false))
  (vector 14 6 16 6 (false))
  (vector 16 6 18 6 (false))
  (vector 18 6 20 6 (false));
2110132101010100302321000032210000320...hear
define cos_not_image / make-image 109 169 / vector 
  (:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:..............................................................:::......................................................................................................:)
  (:..............................................................:::......................................................................................................:)
  (:..............................................................:::......................................................................................................:)
  (:..............................................................:::......................................................................................................:)
  (:..............................................................:::......................................................................................................:)
  (:..............................................................:::......................................................................................................:)
  (:..............................................................:::......................................................................................................:)
  (:..............................................................:::......................................................................................................:)
  (:..............................................................:::......................................................................................................:)
  (:.............................................................:::::.....................................................................................................:)
  (:..............................................................:::......................................................................................................:)
  (:...........:...............:...............:...............:...:...........................................:...............:...............:...............:...........:)
  (:..:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::..............................................::..............::..............::..............::..........:)
  (:..::::::::::::....::::::::::::....::::::::::::....::::::::::::....................................::::::::::::....::::::::::::....::::::::::::....::::::::::::.........:)
  (:..:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::..............................................::..............::..............::..............::..........:)
  (:...........:...............:...............:...............:...................................:...........:...............:...............:...............:...........:)
  (:...............................................................:..............................:::......................................................................:)
  (:...............................................................:.............................:::::.....................................................................:)
  (:...............................................................:...............................:.......................................................................:)
  (:...............................................................:...............................:.......................................................................:)
  (:...............................................................:...............................:.......................................................................:)
  (:...............................................................:...............................:.......................................................................:)
  (:...............................................................:...............................:.......................................................................:)
  (:...............................................................:...............................:.......................................................................:)
  (:...............................................................:...............................:.......................................................................:)
  (:.............................................................:::::.............................:.......................................................................:)
  (:..............................................................:::..............................:.......................................................................:)
  (:...............................................................:...........:...............:...........................................................................:)
  (:...........................................................................::..............::..........................................................................:)
  (:..................................................................::::::::::::....::::::::::::.........................................................................:)
  (:...........................................................................::..............::..........................................................................:)
  (:...........................................................................:...............:...........................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::);
2110132101010101302321001110013211011...hear
equal (cos_not_gate) (distill-circuit (cos_not_image));
2100032210101010033221010100113221010...hear

Run simulator

44. testing alternate primer based on gates: cos_and circuit

# This section contains one or more representations of a circuit
# constructed using UNLESS gates.
define cos_and_gate / vector 
  (vector 0 2 2 2 (true))
  (vector 0 8 2 8 (true))
  (vector 2 2 4 2 (true))
  (vector 2 4 4 4 (true))
  (vector 2 6 4 6 (true))
  (vector 2 8 4 8 (true))
  (vector 4 2 4 4 (true))
  (vector 4 8 4 6 (true))
  (vector 4 4 6 4 (false))
  (vector 4 6 6 6 (false))
  (vector 6 4 8 4 (false))
  (vector 6 6 8 6 (false))
  (vector 8 4 10 4 (false))
  (vector 8 6 10 6 (false))
  (vector 10 2 10 4 (true))
  (vector 10 4 10 6 (true))
  (vector 10 6 10 8 (true))
  (vector 10 8 12 8 (true))
  (vector 12 8 14 8 (true))
  (vector 14 8 16 8 (true))
  (vector 16 8 18 8 (true));
2110132101010110302321000032210000320...hear
define cos_and_image / make-image 88 153 / vector 
  (:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::)
  (:.......................................................................................................................................................:)
  (:.......................................................................................................................................................:)
  (:.......................................................................................................................................................:)
  (:.......................................................................................................................................................:)
  (:.......................................................................................................................................................:)
  (:.......................................................................................................................................................:)
  (:.......................................................................................................................................................:)
  (:.......................................................................................................................................................:)
  (:.......................................................................................................................................................:)
  (:.......................................................................................................................................................:)
  (:.......................................................................................................................................................:)
  (:.......................................................................................................................................................:)
  (:.......................................................................................................................................................:)
  (:...........:...............:...........................................................................................................................:)
  (:..:::::::::::.....:::::::::::..........................................................................................................................:)
  (:..::::::::::::....::::::::::::.........................................................................................................................:)
  (:..:::::::::::.....:::::::::::..........................................................................................................................:)
  (:...........:...............:...........................................................................................................................:)
  (:..............................:::.............................................:::......................................................................:)
  (:..............................:::.............................................:::......................................................................:)
  (:..............................:::.............................................:::......................................................................:)
  (:..............................:::.............................................:::......................................................................:)
  (:..............................:::.............................................:::......................................................................:)
  (:..............................:::.............................................:::......................................................................:)
  (:..............................:::.............................................:::......................................................................:)
  (:..............................:::.............................................:::......................................................................:)
  (:..............................:::.............................................:::......................................................................:)
  (:.............................:::::...........................................:::::.....................................................................:)
  (:..............................:::.............................................:::......................................................................:)
  (:...........................:...:...........:...............:...............:...:.......................................................................:)
  (:..................:::::::::::..............::..............::..............::..........................................................................:)
  (:..................::::::::::::....::::::::::::....::::::::::::....::::::::::::.........................................................................:)
  (:..................:::::::::::..............::..............::..............::..........................................................................:)
  (:...........................:...............:...............:...............:...........................................................................:)
  (:..............................................................................:::......................................................................:)
  (:..............................................................................:::......................................................................:)
  (:..............................................................................:::......................................................................:)
  (:..............................................................................:::......................................................................:)
  (:..............................................................................:::......................................................................:)
  (:..............................................................................:::......................................................................:)
  (:..............................................................................:::......................................................................:)
  (:..............................................................................:::......................................................................:)
  (:..............................................................................:::......................................................................:)
  (:.............................................................................:::::.....................................................................:)
  (:..............................................................................:::......................................................................:)
  (:...........................:...............:...............:...............:...:.......................................................................:)
  (:..................:::::::::::..............::..............::..............::..........................................................................:)
  (:..................::::::::::::....::::::::::::....::::::::::::....::::::::::::.........................................................................:)
  (:..................:::::::::::..............::..............::..............::..........................................................................:)
  (:...........................:...:...........:...............:...............:...........................................................................:)
  (:..............................:::.............................................:::......................................................................:)
  (:.............................:::::............................................:::......................................................................:)
  (:..............................:::.............................................:::......................................................................:)
  (:..............................:::.............................................:::......................................................................:)
  (:..............................:::.............................................:::......................................................................:)
  (:..............................:::.............................................:::......................................................................:)
  (:..............................:::.............................................:::......................................................................:)
  (:..............................:::.............................................:::......................................................................:)
  (:..............................:::.............................................:::......................................................................:)
  (:..............................:::............................................:::::.....................................................................:)
  (:..............................:::.............................................:::......................................................................:)
  (:...........:...............:...................................................:...........:...............:...............:...............:...........:)
  (:..:::::::::::.....:::::::::::.....................................................:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::..........:)
  (:..::::::::::::....::::::::::::....................................................::::::::::::....::::::::::::....::::::::::::....::::::::::::.........:)
  (:..:::::::::::.....:::::::::::.....................................................:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::..........:)
  (:...........:...............:...............................................................:...............:...............:...............:...........:)
  (:.......................................................................................................................................................:)
  (:.......................................................................................................................................................:)
  (:.......................................................................................................................................................:)
  (:.......................................................................................................................................................:)
  (:.......................................................................................................................................................:)
  (:.......................................................................................................................................................:)
  (:.......................................................................................................................................................:)
  (:.......................................................................................................................................................:)
  (:.......................................................................................................................................................:)
  (:.......................................................................................................................................................:)
  (:.......................................................................................................................................................:)
  (:.......................................................................................................................................................:)
  (:.......................................................................................................................................................:)
  (:.......................................................................................................................................................:)
  (:.......................................................................................................................................................:)
  (:.......................................................................................................................................................:)
  (:.......................................................................................................................................................:)
  (:.......................................................................................................................................................:)
  (:.......................................................................................................................................................:)
  (:.......................................................................................................................................................:)
  (:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::);
2110132101010111302321001110013210110...hear
equal (cos_and_gate) (distill-circuit (cos_and_image));
2100032210101011033221010100113221010...hear

Run simulator

45. testing alternate primer based on gates: cos_or circuit

# This section contains one or more representations of a circuit
# constructed using UNLESS gates.
define cos_or_gate / vector 
  (vector 2 4 4 4 (true))
  (vector 2 6 4 6 (true))
  (vector 4 4 6 4 (true))
  (vector 4 6 6 6 (true))
  (vector 6 4 8 4 (true))
  (vector 6 6 8 6 (true))
  (vector 8 4 10 4 (true))
  (vector 8 6 10 6 (true))
  (vector 8 8 10 8 (true))
  (vector 10 2 10 4 (true))
  (vector 10 4 10 6 (false))
  (vector 10 6 10 8 (false))
  (vector 10 8 12 8 (true))
  (vector 12 8 14 8 (true))
  (vector 14 8 16 8 (true))
  (vector 16 8 18 8 (true));
2110132101011000302321000032210000321...hear
define cos_or_image / make-image 93 169 / vector 
  (:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:..............................................................................:::......................................................................................:)
  (:..............................................................................:::......................................................................................:)
  (:..............................................................................:::......................................................................................:)
  (:..............................................................................:::......................................................................................:)
  (:..............................................................................:::......................................................................................:)
  (:..............................................................................:::......................................................................................:)
  (:..............................................................................:::......................................................................................:)
  (:..............................................................................:::......................................................................................:)
  (:..............................................................................:::......................................................................................:)
  (:.............................................................................:::::.....................................................................................:)
  (:..............................................................................:::......................................................................................:)
  (:...........................:...............:...............:...............:...:.......................................................................................:)
  (:..................:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::..........................................................................................:)
  (:..................::::::::::::....::::::::::::....::::::::::::....::::::::::::.........................................................................................:)
  (:..................:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::..........................................................................................:)
  (:...........................:...............:...............:...............:...........................................................................................:)
  (:...............................................................................:.......................................................................................:)
  (:...............................................................................:.......................................................................................:)
  (:...............................................................................:.......................................................................................:)
  (:...............................................................................:.......................................................................................:)
  (:...............................................................................:.......................................................................................:)
  (:...............................................................................:.......................................................................................:)
  (:...............................................................................:.......................................................................................:)
  (:...............................................................................:.......................................................................................:)
  (:...............................................................................:.......................................................................................:)
  (:.............................................................................:::::.....................................................................................:)
  (:..............................................................................:::......................................................................................:)
  (:...........................:...............:...............:...............:...:.......................................................................................:)
  (:..................:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::..........................................................................................:)
  (:..................::::::::::::....::::::::::::....::::::::::::....::::::::::::.........................................................................................:)
  (:..................:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::..........................................................................................:)
  (:...........................:...............:...............:...............:...........................................................................................:)
  (:...............................................................................:.......................................................................................:)
  (:...............................................................................:.......................................................................................:)
  (:...............................................................................:.......................................................................................:)
  (:...............................................................................:.......................................................................................:)
  (:...............................................................................:.......................................................................................:)
  (:...............................................................................:.......................................................................................:)
  (:...............................................................................:.......................................................................................:)
  (:...............................................................................:.......................................................................................:)
  (:...............................................................................:.......................................................................................:)
  (:.............................................................................:::::.....................................................................................:)
  (:..............................................................................:::......................................................................................:)
  (:...........................................................................:...:...........:...............:...............:...............:...........................:)
  (:..................................................................:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::..........................:)
  (:..................................................................::::::::::::....::::::::::::....::::::::::::....::::::::::::....::::::::::::.........................:)
  (:..................................................................:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::..........................:)
  (:...........................................................................:...............:...............:...............:...............:...........................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::);
2110132101011001302321001110013210111...hear
equal (cos_or_gate) (distill-circuit (cos_or_image));
2100032210101100033221010100113221010...hear

Run simulator

46. testing alternate primer based on gates: cos_nor circuit

# This section contains one or more representations of a circuit
# constructed using UNLESS gates.
define cos_nor_gate / vector 
  (vector 0 6 2 6 (true))
  (vector 0 8 2 8 (true))
  (vector 2 6 4 6 (true))
  (vector 2 8 4 8 (true))
  (vector 4 6 6 6 (true))
  (vector 4 8 6 8 (true))
  (vector 6 6 8 6 (true))
  (vector 6 8 8 8 (true))
  (vector 8 4 8 6 (true))
  (vector 8 6 8 8 (false))
  (vector 8 8 8 10 (false))
  (vector 8 10 10 10 (false))
  (vector 10 10 12 10 (false))
  (vector 12 10 14 10 (false))
  (vector 14 10 16 10 (false))
  (vector 16 10 18 10 (false))
  (vector 18 10 20 10 (false));
2110132101011010302321000032210000320...hear
define cos_nor_image / make-image 125 169 / vector 
  (:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:..............................................................:::......................................................................................................:)
  (:..............................................................:::......................................................................................................:)
  (:..............................................................:::......................................................................................................:)
  (:..............................................................:::......................................................................................................:)
  (:..............................................................:::......................................................................................................:)
  (:..............................................................:::......................................................................................................:)
  (:..............................................................:::......................................................................................................:)
  (:..............................................................:::......................................................................................................:)
  (:..............................................................:::......................................................................................................:)
  (:.............................................................:::::.....................................................................................................:)
  (:..............................................................:::......................................................................................................:)
  (:...........:...............:...............:...............:...:.......................................................................................................:)
  (:..:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::..........................................................................................................:)
  (:..::::::::::::....::::::::::::....::::::::::::....::::::::::::.........................................................................................................:)
  (:..:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::..........................................................................................................:)
  (:...........:...............:...............:...............:...........................................................................................................:)
  (:...............................................................:.......................................................................................................:)
  (:...............................................................:.......................................................................................................:)
  (:...............................................................:.......................................................................................................:)
  (:...............................................................:.......................................................................................................:)
  (:...............................................................:.......................................................................................................:)
  (:...............................................................:.......................................................................................................:)
  (:...............................................................:.......................................................................................................:)
  (:...............................................................:.......................................................................................................:)
  (:...............................................................:.......................................................................................................:)
  (:.............................................................:::::.....................................................................................................:)
  (:..............................................................:::......................................................................................................:)
  (:...........:...............:...............:...............:...:.......................................................................................................:)
  (:..:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::..........................................................................................................:)
  (:..::::::::::::....::::::::::::....::::::::::::....::::::::::::.........................................................................................................:)
  (:..:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::..........................................................................................................:)
  (:...........:...............:...............:...............:...........................................................................................................:)
  (:...............................................................:.......................................................................................................:)
  (:...............................................................:.......................................................................................................:)
  (:...............................................................:.......................................................................................................:)
  (:...............................................................:.......................................................................................................:)
  (:...............................................................:.......................................................................................................:)
  (:...............................................................:.......................................................................................................:)
  (:...............................................................:.......................................................................................................:)
  (:...............................................................:.......................................................................................................:)
  (:...............................................................:.......................................................................................................:)
  (:.............................................................:::::.....................................................................................................:)
  (:..............................................................:::......................................................................................................:)
  (:...............................................................:...........:...............:...............:...............:...............:...............:...........:)
  (:...........................................................................::..............::..............::..............::..............::..............::..........:)
  (:..................................................................::::::::::::....::::::::::::....::::::::::::....::::::::::::....::::::::::::....::::::::::::.........:)
  (:...........................................................................::..............::..............::..............::..............::..............::..........:)
  (:...........................................................................:...............:...............:...............:...............:...............:...........:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::);
2110132101011011302321001110013211111...hear
equal (cos_nor_gate) (distill-circuit (cos_nor_image));
2100032210101101033221010100113221010...hear

Run simulator

47. testing alternate primer based on gates: cos_osc circuit

# This section contains one or more representations of a circuit
# constructed using UNLESS gates.
define cos_osc_gate / vector 
  (vector 4 8 6 8 (true))
  (vector 6 8 8 8 (true))
  (vector 8 6 8 8 (true))
  (vector 10 6 8 6 (true))
  (vector 8 8 10 8 (false))
  (vector 12 6 10 6 (false))
  (vector 10 8 12 8 (false))
  (vector 12 8 12 6 (false))
  (vector 12 8 14 8 (false))
  (vector 14 8 16 8 (false));
2110132101011100302321000032210000321...hear
define cos_osc_image / make-image 120 169 / vector 
  (:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:...................................................................:...............:...................................................................................:)
  (:..................................................................:::::::::::.....::...................................................................................:)
  (:.................................................................::::::::::::....::::::::::::..........................................................................:)
  (:..................................................................:::::::::::.....::...................................................................................:)
  (:...................................................................:...............:...........:.......................................................................:)
  (:..............................................................:::.............................:::......................................................................:)
  (:..............................................................:::............................:::::.....................................................................:)
  (:..............................................................:::..............................:.......................................................................:)
  (:..............................................................:::..............................:.......................................................................:)
  (:..............................................................:::..............................:.......................................................................:)
  (:..............................................................:::..............................:.......................................................................:)
  (:..............................................................:::..............................:.......................................................................:)
  (:..............................................................:::..............................:.......................................................................:)
  (:..............................................................:::..............................:.......................................................................:)
  (:.............................................................:::::.............................:.......................................................................:)
  (:..............................................................:::..............................:.......................................................................:)
  (:...........................................:...............:...:...........:...............:...............:...............:...........................................:)
  (:..................................:::::::::::.....:::::::::::..............::..............::..............::..............::..........................................:)
  (:..................................::::::::::::....::::::::::::....::::::::::::....::::::::::::....::::::::::::....::::::::::::.........................................:)
  (:..................................:::::::::::.....:::::::::::..............::..............::..............::..............::..........................................:)
  (:...........................................:...............:...............:...............:...............:...............:...........................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::);
2110132101011101302321001110013211110...hear
equal (cos_osc_gate) (distill-circuit (cos_osc_image));
2100032210101110033221010100113221010...hear

Run simulator

48. testing alternate primer based on gates: cos_sr circuit

# This section contains one or more representations of a circuit
# constructed using UNLESS gates.
define cos_sr_gate / vector 
  (vector 0 2 2 2 (true))
  (vector 0 8 2 8 (true))
  (vector 2 2 4 2 (true))
  (vector 2 8 4 8 (true))
  (vector 4 2 6 2 (true))
  (vector 4 6 6 6 (true))
  (vector 4 8 6 8 (true))
  (vector 6 8 6 6 (true))
  (vector 6 2 8 2 (true))
  (vector 6 6 8 6 (false))
  (vector 8 4 8 6 (false))
  (vector 8 2 10 2 (true))
  (vector 10 4 8 4 (false))
  (vector 8 6 10 6 (false))
  (vector 10 6 10 8 (false))
  (vector 10 2 12 2 (true))
  (vector 12 4 10 4 (false))
  (vector 10 6 12 6 (false))
  (vector 10 8 12 8 (false))
  (vector 12 6 12 4 (false))
  (vector 12 2 14 2 (true))
  (vector 14 4 12 4 (false))
  (vector 12 8 14 8 (false))
  (vector 14 2 14 4 (true))
  (vector 16 4 14 4 (true))
  (vector 14 8 16 8 (false))
  (vector 16 8 18 8 (false))
  (vector 18 8 20 8 (false));
2110132101011110302321000032210000320...hear
define cos_sr_image / make-image 88 169 / vector 
  (:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:...........:...............:...............:...............:...............:...............:...............:...........................................................:)
  (:..:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::..........................................................:)
  (:..::::::::::::....::::::::::::....::::::::::::....::::::::::::....::::::::::::....::::::::::::....::::::::::::.........................................................:)
  (:..:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::..........................................................:)
  (:...........:...............:...............:...............:...............:...............:...............:...........................................................:)
  (:..............................................................................................................:::......................................................:)
  (:..............................................................................................................:::......................................................:)
  (:..............................................................................................................:::......................................................:)
  (:..............................................................................................................:::......................................................:)
  (:..............................................................................................................:::......................................................:)
  (:..............................................................................................................:::......................................................:)
  (:..............................................................................................................:::......................................................:)
  (:..............................................................................................................:::......................................................:)
  (:..............................................................................................................:::......................................................:)
  (:.............................................................................................................:::::.....................................................:)
  (:..............................................................................................................:::......................................................:)
  (:...................................................................:...............:...............:...........:...:...................................................:)
  (:..................................................................::..............::..............::..............:::::::::::..........................................:)
  (:.................................................................::::::::::::....::::::::::::....::::::::::::....::::::::::::..........................................:)
  (:..................................................................::..............::..............::..............:::::::::::..........................................:)
  (:...................................................................:...............:...........:...:...............:...................................................:)
  (:...............................................................:..............................:::......................................................................:)
  (:...............................................................:.............................:::::.....................................................................:)
  (:...............................................................:...............................:.......................................................................:)
  (:...............................................................:...............................:.......................................................................:)
  (:...............................................................:...............................:.......................................................................:)
  (:...............................................................:...............................:.......................................................................:)
  (:...............................................................:...............................:.......................................................................:)
  (:...............................................................:...............................:.......................................................................:)
  (:...............................................................:...............................:.......................................................................:)
  (:.............................................................:::::.............................:.......................................................................:)
  (:..............................................................:::..............................:.......................................................................:)
  (:...........................................:...............:...:...........:...............:...........................................................................:)
  (:..................................:::::::::::..............::..............::..............::..........................................................................:)
  (:..................................::::::::::::....::::::::::::....::::::::::::....::::::::::::.........................................................................:)
  (:..................................:::::::::::..............::..............::..............::..........................................................................:)
  (:...........................................:...:...........:...............:...............:...........................................................................:)
  (:..............................................:::..............................:.......................................................................................:)
  (:.............................................:::::.............................:.......................................................................................:)
  (:..............................................:::..............................:.......................................................................................:)
  (:..............................................:::..............................:.......................................................................................:)
  (:..............................................:::..............................:.......................................................................................:)
  (:..............................................:::..............................:.......................................................................................:)
  (:..............................................:::..............................:.......................................................................................:)
  (:..............................................:::..............................:.......................................................................................:)
  (:..............................................:::..............................:.......................................................................................:)
  (:..............................................:::............................:::::.....................................................................................:)
  (:..............................................:::.............................:::......................................................................................:)
  (:...........:...............:...............:...................................:...........:...............:...............:...............:...............:...........:)
  (:..:::::::::::.....:::::::::::.....:::::::::::..............................................::..............::..............::..............::..............::..........:)
  (:..::::::::::::....::::::::::::....::::::::::::....................................::::::::::::....::::::::::::....::::::::::::....::::::::::::....::::::::::::.........:)
  (:..:::::::::::.....:::::::::::.....:::::::::::..............................................::..............::..............::..............::..............::..........:)
  (:...........:...............:...............:...............................................:...............:...............:...............:...............:...........:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::);
2110132101011111302321001110013210110...hear
equal (cos_sr_gate) (distill-circuit (cos_sr_image));
2100032210101111033221010100113221010...hear

Run simulator

49. testing alternate primer based on gates: cos_d circuit

# This section contains one or more representations of a circuit
# constructed using UNLESS gates.
define cos_d_gate / vector 
  (vector 0 2 2 2 (true))
  (vector 0 6 2 6 (true))
  (vector 2 2 4 2 (true))
  (vector 2 6 4 6 (true))
  (vector 4 2 6 2 (true))
  (vector 4 6 6 6 (true))
  (vector 6 2 8 2 (true))
  (vector 6 6 8 6 (true))
  (vector 8 2 10 2 (true))
  (vector 8 6 10 6 (true))
  (vector 10 6 10 4 (true))
  (vector 10 10 10 8 (true))
  (vector 10 2 12 2 (true))
  (vector 10 4 12 4 (true))
  (vector 10 6 12 6 (true))
  (vector 10 8 12 8 (true))
  (vector 12 10 10 10 (true))
  (vector 12 0 12 2 (true))
  (vector 12 2 12 4 (false))
  (vector 12 6 12 8 (true))
  (vector 12 10 12 12 (true))
  (vector 12 4 14 4 (true))
  (vector 12 8 14 8 (false))
  (vector 14 10 12 10 (true))
  (vector 12 12 14 12 (true))
  (vector 14 0 14 2 (true))
  (vector 14 2 14 4 (true))
  (vector 14 4 14 6 (false))
  (vector 14 6 14 8 (false))
  (vector 14 8 14 10 (false))
  (vector 16 10 14 10 (true))
  (vector 14 12 16 12 (true))
  (vector 16 12 18 12 (true))
  (vector 18 12 20 12 (true));
2110132101100000302321000032210000320...hear
define cos_d_image / make-image 109 169 / vector 
  (:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:..............................................................................................:::.............:::......................................................:)
  (:..............................................................................................:::.............:::......................................................:)
  (:..............................................................................................:::.............:::......................................................:)
  (:..............................................................................................:::.............:::......................................................:)
  (:..............................................................................................:::.............:::......................................................:)
  (:..............................................................................................:::.............:::......................................................:)
  (:..............................................................................................:::.............:::......................................................:)
  (:..............................................................................................:::.............:::......................................................:)
  (:..............................................................................................:::.............:::......................................................:)
  (:.............................................................................................:::::...........:::::.....................................................:)
  (:..............................................................................................:::.............:::......................................................:)
  (:...........:...............:...............:...............:...............:...............:...:...............:.......................................................:)
  (:..:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::..........................................................................:)
  (:..::::::::::::....::::::::::::....::::::::::::....::::::::::::....::::::::::::....::::::::::::.........................................................................:)
  (:..:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::..........................................................................:)
  (:...........:...............:...............:...............:...............:...............:...........................................................................:)
  (:...............................................................................................:..............:::......................................................:)
  (:...............................................................................................:..............:::......................................................:)
  (:...............................................................................................:..............:::......................................................:)
  (:...............................................................................................:..............:::......................................................:)
  (:...............................................................................................:..............:::......................................................:)
  (:...............................................................................................:..............:::......................................................:)
  (:...............................................................................................:..............:::......................................................:)
  (:...............................................................................................:..............:::......................................................:)
  (:...............................................................................................:..............:::......................................................:)
  (:.............................................................................................:::::...........:::::.....................................................:)
  (:..............................................................................................:::.............:::......................................................:)
  (:...........................................................................................:...:...........:...:.......................................................:)
  (:..................................................................................:::::::::::.....:::::::::::..........................................................:)
  (:..................................................................................::::::::::::....::::::::::::.........................................................:)
  (:..................................................................................:::::::::::.....:::::::::::..........................................................:)
  (:...............................................................................:...........:...............:...........................................................:)
  (:..............................................................................:::..............................:.......................................................:)
  (:.............................................................................:::::.............................:.......................................................:)
  (:..............................................................................:::..............................:.......................................................:)
  (:..............................................................................:::..............................:.......................................................:)
  (:..............................................................................:::..............................:.......................................................:)
  (:..............................................................................:::..............................:.......................................................:)
  (:..............................................................................:::..............................:.......................................................:)
  (:..............................................................................:::..............................:.......................................................:)
  (:..............................................................................:::..............................:.......................................................:)
  (:..............................................................................:::............................:::::.....................................................:)
  (:..............................................................................:::.............................:::......................................................:)
  (:...........:...............:...............:...............:...............:...............:...................:.......................................................:)
  (:..:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::..........................................................................:)
  (:..::::::::::::....::::::::::::....::::::::::::....::::::::::::....::::::::::::....::::::::::::.........................................................................:)
  (:..:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::..........................................................................:)
  (:...........:...............:...............:...............:...............:...............:...........................................................................:)
  (:..............................................................................................:::..............:.......................................................:)
  (:..............................................................................................:::..............:.......................................................:)
  (:..............................................................................................:::..............:.......................................................:)
  (:..............................................................................................:::..............:.......................................................:)
  (:..............................................................................................:::..............:.......................................................:)
  (:..............................................................................................:::..............:.......................................................:)
  (:..............................................................................................:::..............:.......................................................:)
  (:..............................................................................................:::..............:.......................................................:)
  (:..............................................................................................:::..............:.......................................................:)
  (:.............................................................................................:::::...........:::::.....................................................:)
  (:..............................................................................................:::.............:::......................................................:)
  (:...........................................................................................:...:...........:...:.......................................................:)
  (:..................................................................................:::::::::::..............::..........................................................:)
  (:..................................................................................::::::::::::....::::::::::::.........................................................:)
  (:..................................................................................:::::::::::..............::..........................................................:)
  (:...............................................................................:...........:...............:...........................................................:)
  (:..............................................................................:::..............................:.......................................................:)
  (:.............................................................................:::::.............................:.......................................................:)
  (:..............................................................................:::..............................:.......................................................:)
  (:..............................................................................:::..............................:.......................................................:)
  (:..............................................................................:::..............................:.......................................................:)
  (:..............................................................................:::..............................:.......................................................:)
  (:..............................................................................:::..............................:.......................................................:)
  (:..............................................................................:::..............................:.......................................................:)
  (:..............................................................................:::..............................:.......................................................:)
  (:..............................................................................:::............................:::::.....................................................:)
  (:..............................................................................:::.............................:::......................................................:)
  (:...................................................................................:...............:...........:...:...................................................:)
  (:..................................................................................:::::::::::.....:::::::::::.....:::::::::::..........................................:)
  (:.................................................................................::::::::::::....::::::::::::....::::::::::::..........................................:)
  (:..................................................................................:::::::::::.....:::::::::::.....:::::::::::..........................................:)
  (:...................................................................................:...............:...............:...................................................:)
  (:..............................................................................................:::......................................................................:)
  (:..............................................................................................:::......................................................................:)
  (:..............................................................................................:::......................................................................:)
  (:..............................................................................................:::......................................................................:)
  (:..............................................................................................:::......................................................................:)
  (:..............................................................................................:::......................................................................:)
  (:..............................................................................................:::......................................................................:)
  (:..............................................................................................:::......................................................................:)
  (:..............................................................................................:::......................................................................:)
  (:.............................................................................................:::::.....................................................................:)
  (:..............................................................................................:::......................................................................:)
  (:...............................................................................................:...........:...............:...............:...............:...........:)
  (:..................................................................................................:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::..........:)
  (:..................................................................................................::::::::::::....::::::::::::....::::::::::::....::::::::::::.........:)
  (:..................................................................................................:::::::::::.....:::::::::::.....:::::::::::.....:::::::::::..........:)
  (:...........................................................................................................:...............:...............:...............:...........:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:.......................................................................................................................................................................:)
  (:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::);
2110132101100001302321001110013211011...hear
equal (cos_d_gate) (distill-circuit (cos_d_image));
2100032210110000033221010100113221011...hear

Run simulator

50. probing networks of unless gates

define set-input /
  ? circuit /
  ? index /
  ? value /
  assign wire (list-ref (circuit) (index)) 
  (map (? w (if (equal (w) (wire))
        (vector (list-ref (w) 0)
            (list-ref (w) 1)
            (list-ref (w) 2)            
            (list-ref (w) 3)
            (value))
        (w)))
       (circuit));
2110132101100010302321100321001001003...hear
define read-output /
  ? circuit /
  ? index /
  assign len (list-length / circuit) /
  assign wire (list-ref (circuit) / - (- (len) 1) (index)) /
  list-ref (wire) 4;
2110132101100101302321100321001001003...hear
define sim /
  ? circuit / ? steps / ? setter
  (if (> (steps) 0)
      (sim (simulate-unless (setter / circuit)) (- (steps) 1) (setter))
      (circuit));
2110132101100111302321100321001001003...hear
define smart-sim /
  ? circuit /
  ? setter /
  sim (circuit) (list-length / circuit) (setter);
2110132101101010302321100321001001003...hear
# test cos_not gate
define cos_not_harness /
  ? x /
  assign c (cos_not_gate) / 
  assign c (smart-sim (c) (? c (set-input (c) 0 (x)))) /
  read-output (c) 0;
2110132101101011302321100321001013023...hear
= (false) / cos_not_harness / true;
2103221011003302321011010113023210101...hear
= (true) / cos_not_harness / false;
2103221010113302321011010113023210110...hear
# test cos_and gate
define cos_and_harness /
  ? x / ? y /
  assign c (cos_and_gate) / 
  assign c (smart-sim (c) (? c (set-input (set-input (c) 0 (x)) 1 (y)))) /
  read-output (c) 0;
2110132101101100302321100321001013023...hear
= (false) / cos_and_harness (false) (false);
2103221011003302321011011003221011003...hear
= (false) / cos_and_harness (false) (true);
2103221011003302321011011003221011003...hear
= (false) / cos_and_harness (true) (false);
2103221011003302321011011003221010113...hear
= (true) / cos_and_harness (true) (true);
2103221010113302321011011003221010113...hear
# this code is more awkward than it needs to be -
# should make circuits mutable

51. end of part 3, start of part 4

# The following parts of the message start
# to introduce some self-reference into the message
intro part4;
203210110110132233hear

52. a mechanism for referring to parts of the message

# Many choices for how to do this.
# Could do it without special machinery by using the
# standard A-B trick for giving e.g. a Turing machine
# access to its own description.
# Instead, will simply introduce a "primer" function
# that gives access to every statement made so far 
# (question: should future statements be included? 
# tentatively assume YES: will simplify
# discussion of creating modified copies of the
# complete message).
# For now, assume primer is a list of statements,
# with each statement being a list in the same
# form as "translate" functions expect.
# This means that there is, for now, no
# distinction between unary or binary,
# and the "/" structure is expanded.
intro primer;
203210001132233hear
# this line is referred to later - change/move carefully
equal (list-ref (primer) 0) (vector intro 1);
2100032211111032210001133203322100003...hear
equal (list-ref (primer) 1) (vector intro 2);
2100032211111032210001133213322100003...hear
equal (list-ref (primer) 2) (vector intro 3);
2100032211111032210001133210332210000...hear
assign idx (list-find (primer) (vector intro primer) (? x 0)) 
    (equal (list-ref (primer) (+ (idx) 1))
           (vector equal 
               (vector list-ref (vector primer) 0)
               (vector vector intro 1)));
2111032100011032210001113221000113322...hear
# Now, we could return to the MUD, simulate an agent A
# transferring a copy of the primer to another agent B,
# and then show B making a modified copy of that primer
# and passing it back to A.
# We could also show agents experimenting with the
# primer in various ways.
# Message is pretty solid up to this point.
# For testing purposes, useful to save state here to disk,
# command: DISK-SAVE base

53. some preparatory work for integrating with Java code

class Object ()
       (method add-one (lambda (x) (+ (x) 1)))
       (method unknown (lambda (x) (x)))
       (method <init>-V (self))
       (method <init> (self))
       (method classname Object)
       (method equals-Object-Z (this ==))
       (method equals (self equals-Object-Z))
       (method act (true))
       (method isobj (true));
2110110003210110111032322100100113210...hear
define java-object / Object;
21101321011101103023210110111032233hear
define act / ? x / true;
2110132101110100302321100321001013023...hear
#(class java-string ()
#       (field super (java-object new))
#       (method classname String)
#       (method unknown (lambda (x) (super (x)))));
# inconsistency of various kinds of equality throughout message
# needs to be cleaned up
class Integer ()
       (field super (java-object new))
       (field value (cell new 0))
       (method <init> (self))
       (method <init>-V (self))
       (method <init>-I-V (lambda (v) 
                (begin 
                  (value set (v))
                  (self))))
       (method intValue-V (value get))
       (method intValue (self intValue-V))
       (method equals-Object-Z (lambda (o) (if (= (o classname) Integer)
                           (= (value get) (o value get))
                           (false))))
       (method equals (self equals-Object-Z))
       (method get (value get))
       (method set (lambda(x)
             (value set
                (if (number? / x)
                (x)
                (x intValue)))))
       (method classname Integer)
       (method unknown (lambda (x) (super (x))));
2110110003210111011132322110111013211...hear
# string is basically the same as an integer
class String ()
       (field super (java-object new))
       (field value (cell new 0))
       (method <init> (self))
       (method <init>-V (self))
       (method <init>-String-V (lambda (v) 
                 (begin 
                   (value set (v value get))
                   (self))))
       (method int-init (lambda (x) 
              (begin 
                (value set (x))
                (self))))
       (method intValue-V (value get))
       (method intValue (self intValue-V))
       (method get (value get))
       (method set (lambda(x)
             (value set
                (if (number? / x)
                (x)
                (x intValue)))))
       (method equals-Object-Z (lambda (o) (if (= (o classname) String)
                           (= (value get) (o value get))
                           (false))))
       (method equals (self equals-Object-Z))
       (method classname String)
       (method unknown (lambda (x) (super (x))));
2110110003210111110132322110111013211...hear
# will need to install class hierarchy, just hardcode a few things for now
define java
  (? x / ? y 
     (cond ((= (y) String) (String))
       ((= (y) Object) (java-object))
       ((= (y) Integer) (Integer))
       (java-object)));
2110132110000000322110032100101302321...hear
(java util String) new isobj;
2211000000032110000001321011111013321...hear
= ((java util String) new add-one 15) 16;
2103222110000000321100000013210111110...hear
class java-numeric ()
       (field super (java-object new))
       (method unknown (lambda (x) (super (x))))
       (field java-content (cell new 0))
       (method get (java-content get))
       (method init (lambda (v)
              (begin
            (self set (v))
            (self))))
       (method set (lambda (v) (java-content set (v))));
2110110003211000001032322110111013211...hear
define byte (java-numeric);
2110132110000101322110000010332233hear
define char (java-numeric);
2110132110000110322110000010332233hear
define double (java-numeric);
2110132110000111322110000010332233hear
define float (java-numeric);
2110132110001000322110000010332233hear
define int (java-numeric);
211013210101110322110000010332233hear
define long (java-numeric);
2110132110001001322110000010332233hear
define short (java-numeric);
2110132110001010322110000010332233hear
define boolean (java-numeric);
2110132110001011322110000010332233hear
define void (java-numeric);
2110132110001100322110000010332233hear
define java-test1 (int new);
2110132110001101322101011103211001000...hear
java-test1 set 15;
2110001101321110101132111132233hear
= 15 (java-test1 get);
2103211113221100011013211101010332233hear
define java-test2 (int new init 17);
2110132110001110322101011103211001000...hear
= 17 (java-test2 get);
21032100013221100011103211101010332233hear
define state-machine-test1
  (? x
     (cond ((= (x) 1) 20)
       ((= (x) 2) 40)
       ((= (x) 3) 60)
       0));
2110132110001111322110032100101322101...hear
= (state-machine-test1 3) 60;
210322110001111321133211110032233hear
# really ought to go back and be clear about eager/laziness issues
define state-machine-test2
  (? x
     (cond ((= (x) 1) (java-test1 set 20))
       ((= (x) 2) (java-test1 set 40))
       ((= (x) 3) (java-test1 set 60))
       0));
2110132110010000322110032100101322101...hear
state-machine-test2 2;
2110010000321032233hear
= (java-test1 get) 40;
210322110001101321110101033210100032233hear
define compare-object-reference
  (lambda (o1 o2)
    (if (number? / o1)
    (number? / o2)
    (= (o1 unique-id) (o2 unique-id))));
2110132110010001322110103221100100103...hear
define jvm-maker
  (lambda (vars stack pc ret)
    (? op
     (begin
       (pc set (+ (pc get) 1)) /
     cond ((= (op) new)
        (lambda (type)
          (stack-push (stack) ((type) new))))
       ((= (op) dup)
        (stack-push (stack) (stack-peek (stack))))
       ((= (op) checkcast)
        (lambda (t)
          1))
       ((or (= (op) astore) (= (op) istore))
        (lambda (index)
          (vars set (hash-add (vars get) (index) (stack-pop (stack))))))
       ((or (= (op) aload) (= (op) iload))
        (lambda (index)
          (stack-push (stack) (hash-ref (vars get) (index)))))
       ((or (= (op) iconst) (= (op) ldc))
        (lambda (val)
          (stack-push (stack) (val))))
       ((= (op) aconst_null)
        (stack-push (stack) 0))
       ((= (op) instanceof)
        (lambda (t)
          (stack-push 
           (stack)
           (not / number? / (stack-pop / stack) (t new classname)))))
       ((= (op) getfield)
        (lambda (key ignore)
          (stack-push (stack) ((stack-pop (stack)) (key) get))))
       ((= (op) putfield)
        (lambda (key ignore)
          (let ((val (stack-pop (stack))))
        ((stack-pop (stack)) (key) set (val)))))
       ((= (op) imul)
        (let ((v2 (stack-pop (stack))))
          (let ((v1 (stack-pop (stack))))
        (stack-push (stack)
                (* (v1) (v2))))))
       ((= (op) iadd)
        (let ((v2 (stack-pop (stack))))
          (let ((v1 (stack-pop (stack))))
        (stack-push (stack)
                (+ (v1) (v2))))))
       ((= (op) isub)
        (let ((v2 (stack-pop (stack))))
          (let ((v1 (stack-pop (stack))))
        (stack-push (stack)
                (- (v1) (v2))))))
       ((= (op) goto)
        (lambda (x)
          (pc set (x))))
       ((= (op) iflt)
        (lambda (x)
          (if (< (stack-pop (stack)) 0)
          (pc set (x))
          0)))
       ((= (op) ifle)
        (lambda (x)
          (if (< (stack-pop (stack)) 1)
          (pc set (x))
          0)))
       ((= (op) ifgt)
        (lambda (x)
          (if (> (stack-pop (stack)) 0)
          (pc set (x))
          0)))
       ((= (op) ifge)
        (lambda (x)
          (if (>= (stack-pop (stack)) 0)
          (pc set (x))
          0)))
       ((= (op) ifne)
        (lambda (x)
          (if (not (= (stack-pop (stack)) 0))
          (pc set (x))
          0)))
       ((= (op) ifeq)
        (lambda (x)
          (if (= (stack-pop (stack)) 0)
          (pc set (x))
          0)))
       ((= (op) if_icmpne)
        (let ((v2 (stack-pop (stack))))
          (let ((v1 (stack-pop (stack))))
        (lambda (x)
          (if (not (= (v1) (v2)))
              (pc set (x))
              0)))))
       ((= (op) if_icmpeq)
        (let ((v2 (stack-pop (stack))))
          (let ((v1 (stack-pop (stack))))
        (lambda (x)
          (if (= (v1) (v2))
              (pc set (x))
              0)))))
       ((= (op) if_acmpne)
        (let ((v2 (stack-pop (stack))))
          (let ((v1 (stack-pop (stack))))
        (lambda (x)
          (if (not (compare-object-reference (v1) (v2)))
              (pc set (x))
              0)))))
       ((= (op) if_acmpeq)
        (let ((v2 (stack-pop (stack))))
          (let ((v1 (stack-pop (stack))))
        (lambda (x)
          (if (compare-object-reference (v1) (v2))
              (pc set (x))
              0)))))
       ((= (op) if_icmpge)
        (let ((v2 (stack-pop (stack))))
          (let ((v1 (stack-pop (stack))))
        (lambda (x)
          (if (>= (v1) (v2))
              (pc set (x))
              0)))))
       ((= (op) if_icmpgt)
        (let ((v2 (stack-pop (stack))))
          (let ((v1 (stack-pop (stack))))
        (lambda (x)
          (if (> (v1) (v2))
              (pc set (x))
              0)))))
       ((= (op) if_icmple)
        (let ((v2 (stack-pop (stack))))
          (let ((v1 (stack-pop (stack))))
        (lambda (x)
          (if (<= (v1) (v2))
              (pc set (x))
              0)))))
       ((= (op) if_icmplt)
        (let ((v2 (stack-pop (stack))))
          (let ((v1 (stack-pop (stack))))
        (lambda (x)
          (if (< (v1) (v2))
              (pc set (x))
              0)))))
       ((= (op) ifnull)
        (lambda (x)
          (if (number? / stack-pop (stack))
          (pc set (x))
          0)))
       ((= (op) ifnonnull)
        (lambda (x)
          (if (not (number? / stack-pop (stack)))
          (pc set (x))
          0)))
       ((= (op) return)
        (begin (ret set (hash-ref (vars get) 0))
           (pc set -1)))
       ((= (op) ireturn)
        (begin (ret set (stack-pop (stack)))
           (pc set -1)))
       ((= (op) areturn)
        (begin (ret set (stack-pop (stack)))
           (pc set -1)))
       ((= (op) goto)
        (lambda (target)
          (pc set (target))))
       ((= (op) invokevirtual)
        (lambda (target m n)
          (let ((result (stack-call (stack) (target) (m))))
        (if (= (n) 1)
            (stack-push (stack) (result))
            0))))
       ((= (op) invokeinterface)
        (lambda (target m n ignore)
          (let ((result (stack-call (stack) (target) (m))))
        (if (= (n) 1)
            (stack-push (stack) (result))
            0))))
       ((= (op) invokespecial)
        (lambda (target m n)
          (let ((result (stack-call-special (stack) 
                        (hash-ref (vars get) 0)
                        (target) 
                        (m))))
        (if (= (n) 1)
            (stack-push (stack) (result))
            0))))
       0)));
2110132110010100322110103221100101013...hear
define stack-call
  (lambda (stack target ct)
    (if (= (ct) 0)
    ((stack-pop (stack)) (target))
    (let ((arg (stack-pop (stack))))
      ((stack-call (stack) (target) (- (ct) 1)) (arg)))));
2110132111000101322110103221100101103...hear
define stack-call-special
  (lambda (stack self target ct)
    (if (= (ct) 0)
    (let ((act (stack-pop / stack)))
      (if (act == (self))
          (act super (target))
          (act (target))))
    (let ((arg (stack-pop (stack))))
      ((stack-call-special (stack) (self) (target) (- (ct) 1)) (arg)))));
2110132111001000322110103221100101103...hear
define stack-push
  (lambda (stack x)
    (stack set (prepend (x) (stack get))));
2110132110011010322110103221100101103...hear
define stack-pop
  (lambda (stack)
    (let ((v (head (stack get))))
      (begin
    (stack set (tail (stack get)))
    (v))));
2110132110100000322110103221100101103...hear
define stack-peek
  (lambda (stack)
    (head (stack get)));
2110132110011100322110103221100101103...hear
define stack-test1 (cell new (vector 5 3 1));
2110132111001011322111001113211001000...hear
= (stack-pop (stack-test1)) 5;
210322110100000322111001011333210132233hear
= (stack-peek (stack-test1)) 3;
21032211001110032211100101133321132233hear
= (stack-pop (stack-test1)) 3;
21032211010000032211100101133321132233hear
stack-push (stack-test1) 7;
211001101032211100101133211132233hear
= (stack-pop (stack-test1)) 7;
210322110100000322111001011333211132233hear
define vars-test1 (cell new (hash-null));
2110132111001100322111001113211001000...hear
define pc-test1 (cell new 0);
2110132111001101322111001113211001000...hear
define ret-test1 (cell new 0);
2110132111001110322111001113211001000...hear
define test-jvm (jvm-maker (vars-test1) (stack-test1) (pc-test1) (ret-test1));
2110132111001111322110010100322111001...hear
stack-push (stack-test1) 4;
211001101032211100101133210032233hear
test-jvm dup;
21110011113211001101132233hear
= (stack-pop (stack-test1)) 4;
210322110100000322111001011333210032233hear
= (stack-pop (stack-test1)) 4;
210322110100000322111001011333210032233hear
stack-push (stack-test1) 66;
2110011010322111001011332100001032233hear
stack-push (stack-test1) 77;
2110011010322111001011332100110132233hear
test-jvm astore 3;
211100111132110011110321132233hear
= (stack-pop (stack-test1)) 66;
2103221101000003221110010113332100001...hear
test-jvm aload 3;
211100111132110100001321132233hear
= (stack-pop (stack-test1)) 77;
2103221101000003221110010113332100110...hear
class test-class ()
       (field x ((int) new))
       (field y ((int) new));
2110110003211101000032322110111013210...hear
define test-this (test-class new);
2110132111010001322111010000321100100...hear
test-this x set 5;
21110100013210010132111010113210132233hear
= (test-this x get) 5;
2103221110100013210010132111010103321...hear
stack-push (stack-test1) (test-this);
2110011010322111001011332211101000133...hear
= ((stack-pop (stack-test1)) x get) 5;
2103222110100000322111001011333210010...hear
stack-push (stack-test1) (test-this);
2110011010322111001011332211101000133...hear
test-jvm astore 0;
21110011113211001111032032233hear
test-jvm aload 0;
21110011113211010000132032233hear
test-jvm getfield x (int);
2111001111321101001113210010132210101...hear
= (stack-pop (stack-test1)) 5;
210322110100000322111001011333210132233hear
test-jvm aload 0;
21110011113211010000132032233hear
test-jvm iconst 15;
21110011113211010001132111132233hear
test-jvm putfield y (int);
2111001111321101010013210010032210101...hear
= (test-this y get) 15;
2103221110100013210010032111010103321...hear
stack-push (stack-test1) 7;
211001101032211100101133211132233hear
stack-push (stack-test1) 10;
2110011010322111001011332101032233hear
test-jvm imul;
21110011113211010101032233hear
test-jvm ireturn;
21110011113211100000032233hear
= (ret-test1 get) 70;
2103221110011103211101010332100011032233hear
define state-machine-helper /
  ? at /
  lambda (vars stack machine) /
  let ((pc (cell new (at)))
       (ret (cell new (true)))) /
  let ((jvm (jvm-maker (vars) (stack) (pc) (ret))))
  (begin
    (machine (jvm) (pc get))
    (if (= (pc get) -1)
    (ret get)
    (state-machine-helper (pc get) (vars) (stack) (machine))));
2110132111010010302321100321110100113...hear
define state-machine
  (state-machine-helper 0);
2110132111010101322111010010320332233hear
stack-push (stack-test1) 10;
2110011010322111001011332101032233hear
stack-push (stack-test1) 33;
211001101032211100101133210000132233hear
= (state-machine (vars-test1) (stack-test1) / ? jvm / ? x
          (cond ((= (x) 0) (jvm istore 4))
            ((= (x) 1) (jvm iload 4))
            (jvm ireturn)))
   33;
2103221110101013221110011003322111001...hear
stack-push (stack-test1) 10;
2110011010322111001011332101032233hear
define bytecode-test-mul
  (lambda (arg0 arg1) /
      let ((vars / cell new / make-hash / vector (pair 0 0) (pair 1 (arg0)) (pair 2 (arg1)))
           (stack / cell new / vector)) /
           state-machine (vars) (stack) / ? jvm / ? x / cond
           ((= (x) 0) (jvm iload 1))
           ((= (x) 1) (jvm iload 2))
           ((= (x) 2) (jvm imul))
           ((= (x) 3) (jvm ireturn))
           (jvm return));
2110132111010110322110103221110101113...hear
= (bytecode-test-mul 5 9) 45;
2103221110101103210132100133210110132233hear

54. class translation 'COS_JavaTest'

# Sun Mar 23 02:45:09 CET 2014
# Produced by Fritzifier, based on JasminVisitor
# Using BCEL library to read Java bytecode
# Here is the original code:
# public class COS_JavaTest {
#     private int q = 0;
#     public int add(int x, int y) {
#     return x+y;
#     }
#     public int sub(int x, int y) {
#     return x-y;
#     }
#     public int mult(int x, int y) {
#     return x*y;
#     }
#     public int addmult(int x, int y, int z) {
#     return add(x,mult(y,z));
#     }
#     public void set(int x) {
#     q = x;
#     }
#     public int get() {
#     return q;
#     }
#     public int fact(int x) {
#     return (x>0)?(x*fact(sub(x,1))):1;
#     }
# }
# 
class COS_JavaTest ()
   (field super-ref (make-cell 0))
   (method new (set! (super-ref) ((java lang Object) / this)))
   (method super (? x / (get! / super-ref) / x))
   (method unknown (? x / self super / x))
   (field q ((int) new))
   (method <init>-V
     (lambda () /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm aload 0))
         ((= (x) 1) (jvm invokespecial <init>-V 0 0))
         ((= (x) 2) (jvm aload 0))
         ((= (x) 3) (jvm iconst 0))
         ((= (x) 4) (jvm putfield q (int)))
         ((= (x) 5) (jvm return))
         (jvm return))
   )

   (method <init> (self <init>-V))

   (method add-I-I-I
     (lambda (arg0 arg1) /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)) (pair 1 (arg0)) (pair 2 (arg1)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm iload 1))
         ((= (x) 1) (jvm iload 2))
         ((= (x) 2) (jvm iadd))
         ((= (x) 3) (jvm ireturn))
         (jvm return))
   )

   (method add (self add-I-I-I))

   (method sub-I-I-I
     (lambda (arg0 arg1) /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)) (pair 1 (arg0)) (pair 2 (arg1)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm iload 1))
         ((= (x) 1) (jvm iload 2))
         ((= (x) 2) (jvm isub))
         ((= (x) 3) (jvm ireturn))
         (jvm return))
   )

   (method sub (self sub-I-I-I))

   (method mult-I-I-I
     (lambda (arg0 arg1) /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)) (pair 1 (arg0)) (pair 2 (arg1)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm iload 1))
         ((= (x) 1) (jvm iload 2))
         ((= (x) 2) (jvm imul))
         ((= (x) 3) (jvm ireturn))
         (jvm return))
   )

   (method mult (self mult-I-I-I))

   (method addmult-I-I-I-I
     (lambda (arg0 arg1 arg2) /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)) (pair 1 (arg0)) (pair 2 (arg1)) (pair 3 (arg2)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm aload 0))
         ((= (x) 1) (jvm iload 1))
         ((= (x) 2) (jvm aload 0))
         ((= (x) 3) (jvm iload 2))
         ((= (x) 4) (jvm iload 3))
         ((= (x) 5) (jvm invokevirtual mult-I-I-I 2 1))
         ((= (x) 6) (jvm invokevirtual add-I-I-I 2 1))
         ((= (x) 7) (jvm ireturn))
         (jvm return))
   )

   (method addmult (self addmult-I-I-I-I))

   (method set-I-V
     (lambda (arg0) /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)) (pair 1 (arg0)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm aload 0))
         ((= (x) 1) (jvm iload 1))
         ((= (x) 2) (jvm putfield q (int)))
         ((= (x) 3) (jvm return))
         (jvm return))
   )

   (method set (self set-I-V))

   (method get-I
     (lambda () /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm aload 0))
         ((= (x) 1) (jvm getfield q (int)))
         ((= (x) 2) (jvm ireturn))
         (jvm return))
   )

   (method get (self get-I))

   (method fact-I-I
     (lambda (arg0) /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)) (pair 1 (arg0)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm iload 1))
         ((= (x) 1) (jvm ifle 11))
         ((= (x) 2) (jvm iload 1))
         ((= (x) 3) (jvm aload 0))
         ((= (x) 4) (jvm aload 0))
         ((= (x) 5) (jvm iload 1))
         ((= (x) 6) (jvm iconst 1))
         ((= (x) 7) (jvm invokevirtual sub-I-I-I 2 1))
         ((= (x) 8) (jvm invokevirtual fact-I-I 1 1))
         ((= (x) 9) (jvm imul))
         ((= (x) 10) (jvm goto 12))
         ((= (x) 11) (jvm iconst 1))
         ((= (x) 12) (jvm ireturn))
         (jvm return))
   )

   (method fact (self fact-I-I))

 ;
2110110003211101100132322110111013211...hear

55. check that automatic conversion is workable

define test1 (COS_JavaTest new);
2110132111100111322111011001321100100...hear
# Note that the names of methods include type information.
# This could easily be removed, but is retained so that overloading
# is possible in the Java code.
# I is integer, V is void.  The last type in the name is the return type.
= (test1 mult-I-I-I 15 10) 150;
2103221111001113211101111132111132101...hear
# The type information can be safely omitted if there is no ambiguity
= (test1 mult 15 10) 150;
2103221111001113211001113211113210103...hear
= (test1 addmult-I-I-I-I 4 15 10) 154;
2103221111001113211110000032100321111...hear
begin
  (test1 set-I-V 87)
  (= (test1 get-I) 87);
2100000003221111001113211110001132101...hear
= (test1 fact-I-I 0) 1;
21032211110011132111100101320332132233hear
= (test1 fact-I-I 1) 1;
21032211110011132111100101321332132233hear
= (test1 fact-I-I 5) 120;
2103221111001113211110010132101332111...hear
# Yay! testing says this works.
# So structure for bytecode interpretation is in place.
# Very few opcodes actually implemented yet though.

56. another simple little text-adventure space

# let us try to make a slightly more interesting world
define make-table
  (lambda (lst)
    (crunch (? x / ? h / 
           assign name (car / x) /
           assign obj (cdr / x) /
           hash-add (h) (name) (obj))
        (append (hash-null) (lst))));
2110132111101000322110103221110113322...hear
# note, the quoted strings below are just represented as a big number,
# nothing special
define geo-map 
  (make-table
   (map
    (? name (cons (name) (room new (name))))
    (vector "boston" "dublin" "paris" "genoa")));
2110132111101001322111101000322101010...hear
define my-links
  (map 
   (? entry (assign src (car / entry) /
            assign dest (cdr / entry) /
            door new (geo-map / src) (geo-map / dest)))
   (vector
    (cons "boston" "dublin")
    (cons "dublin" "paris")
    (cons "boston" "paris")
    (cons "paris" "genoa")));
2110132111101010322101010132211003211...hear
define myrobo (robo new);
2110132100010111322100001110321100100...hear
myrobo set-room (geo-map "dublin");
2100010111321000001003221111010013210...hear
(equal "dublin" / myrobo get-room name);
2100032100111011001001110010110100100...hear
myrobo update;
21000101113210000100132233hear
(equal "paris" / myrobo get-room name);
2100032110000101110010011010010111001...hear
myrobo update;
21000101113210000100132233hear
(equal "genoa" / myrobo get-room name);
2100032100110101001000110010000101000...hear
myrobo update;
21000101113210000100132233hear
(equal "paris" / myrobo get-room name);
2100032110000101110010011010010111001...hear
myrobo update;
21000101113210000100132233hear
(equal "boston" / myrobo get-room name);
2100032100011001000101110010000100100...hear
myrobo update;
21000101113210000100132233hear
(equal "dublin" / myrobo get-room name);
2100032100111011001001110010110100100...hear
myrobo update;
21000101113210000100132233hear
(equal "paris" / myrobo get-room name);
2100032110000101110010011010010111001...hear
# all characters should update together
class world (the-places the-links)
       (field things (container new))
       (field names (cell new (hash-null)))
       (field places (cell new 0))
       (field links (cell new 0))
       (method new 
           (begin
         (places set
            (make-table
             (map
              (? name (cons (name) (room new (name))))
              (the-places))))
         (links set
            (map 
             (? entry (assign src (car / entry) /
                      assign dest (cdr / entry) /
                      door new 
                      (places get / src) 
                      (places get / dest)))
             (the-links)))))
       (method add (lambda (place name val) 
             (begin
               (val set-room (places get / place))
               (val set-name / name)
               (names set (hash-add (names get)
                        (name)
                        (val)))
               (things add (val)))))
       (method find (lambda (n) (names get (n) get-room name)))
       (method reachable (lambda (place)
               (let ((exits
                  (select-match (lambda (x) 
                          (instanceof door (x)))
                        (places get (place) inventory))))
                 (map (? door (door access-from 
                        (places get / place)
                        name))
                  (exits)))))
       (method update (begin 
            (map (? x (x update)) 
                 (things inventory))
            (true)));
2110110003211110110032211110110132111...hear
define geo-world
  (world new 
     (vector "boston" "dublin" "paris" "genoa")
     (vector
      (cons "boston" "dublin")
      (cons "dublin" "paris")
      (cons "boston" "paris")
      (cons "paris" "genoa")));
2110132111110101322111101100321100100...hear
geo-world add "dublin" "robo1" (robo new);
2111110101321100100321001110110010011...hear
geo-world add "genoa" "robo2" (robo new);
2111110101321100100321001101010010001...hear
(equal "dublin" / geo-world find "robo1");
2100032100111011001001110010110100100...hear
(equal "genoa" / geo-world find "robo2");
2100032100110101001000110010000101000...hear
geo-world update;
21111101013210000100132233hear
(equal "paris" / geo-world find "robo1");
2100032110000101110010011010010111001...hear
(equal "paris" / geo-world find "robo2");
2100032110000101110010011010010111001...hear
(equal (vector "paris" "dublin") / geo-world reachable "boston");
2100032210000321100001011100100110100...hear
(equal (vector "paris") / geo-world reachable "genoa");
2100032210000321100001011100100110100...hear

57. native implementation of a Java list, hash classes

define flex-equals
  (lambda (x y) 
    (if (number? / x)
    (if (number? / y)
        (= (x) (y))
        (false))
    (if (number? / y)
        (false)
        (x equals (y)))));
2110132111110110322110103221001013210...hear
define remove-object
  (lambda (x) 
    (remove-match (lambda (y) 
            (flex-equals (x) (y)))));
2110132111110111322110103221001013322...hear
define contains-object
  (lambda (x lst)
    (if (> (list-length / lst) 0)
    (if (flex-equals (head / lst) (x))
        (true)
        (contains-object (x) (tail / lst)))
    (false)));
2110132111111000322110103221001013211...hear
class COS_JList ()
       (field super ((java lang Object) new))
       (method unknown (lambda (x) (super (x))))
       (field contents (cell new (vector)))
       (method <init>-V (self))
       (method <init> (self <init>-V))
       (method add-Object-V (lambda (x)
             (contents set (prepend (x) (contents get)))))
       (method add (self add-Object-V))
       (method remove-Object-Z (lambda (x)
            (contents set 
                  (remove-object (x) (contents get)))))
       (method remove (self remove-Object-Z))
       (method contains-Object-Z (lambda (x)
                   (contains-object (x) (contents get))))
       (method contains (self contains-Object-Z))
       (method get-I-Object (lambda (x)
             (list-ref (contents get) (x))))
       (method get (self get-I-Object))
       (method iterator-Iterator (COS_JListIterator new (self)))
       (method iterator (self iterator-Iterator))
       (method size-V-I (list-length (contents get)))
       (method size (self size-V-I));
2110110003211111100132322110111013211...hear
define test1 (COS_JList new);
2110132111100111322111111001321100100...hear
begin (test1 add-Object-V (test1))
       (= 1 / test1 size-V-I);
2100000003221111001113211111101032211...hear
test1 == (test1 get-I-Object 0);
2111100111321110000132211110011132111...hear
class COS_JHashMap ()
       (field super ((java lang Object) new))
       (method unknown (lambda (x) (super (x))))
       (field contents (cell new (? x 0)))
       (method <init>-V (self))
       (method <init> (self <init>-V))
       (method put-Object-Object-V (lambda (x y)
                     (let ((prev / contents get))
                       (contents set 
                         (? z 
                            (if (flex-equals (z) (x))
                            (y)
                            (prev (z))))))))
       (method put (self put-Object-Object-V))
       (method get-Object-Object (lambda (x)
                   (contents get (x))))
       (method get (self get-Object-Object));
2110110003210000001003232211011101321...hear
define test2 (COS_JHashMap new);
2110132100000100032210000001003211001...hear
begin (test2 put-Object-Object-V 5 10)
       (= 10 / test2 get 5);
2100000003221000001000321000000101321...hear
# There is Java code for COS_JList available
# There is Java code for COS_JHashMap available

58. testing the JList class

define test1 (COS_JList new);
2110132111100111322111111001321100100...hear
begin (test1 add-Object-V (test1))
       (= 1 (test1 size-V-I));
2100000003221111001113211111101032211...hear
(test1 get-I-Object 0) == (test1);
2211110011132111111110320332111000013...hear

59. basic iterator implementation

class COS_JListIterator (ref)
       (field pipe (cell new (ref contents get)))
       (method <init>-V (self))
       (method <init> (self <init>-V))
       (method hasNext-Z (> (list-length / pipe get) 0))
       (method hasNext (self hasNext-Z))
       (method next (self next-Object))
       (method next-Object 
           (let ((result (head / pipe get)))
         (begin 
           (pipe set / tail / pipe get)
           (result))));
2110110003210000000003221000001001332...hear
define test1 (COS_JList new);
2110132111100111322111111001321100100...hear
begin
  (test1 add 15)
  (test1 add 72)
  (test1 add 99)
  (true);
2100000003221111001113211001003211113...hear
define iter1 (test1 iterator);
2110132100000111032211110011132100000...hear
iter1 hasNext;
2100000111032100000110032233hear
(equal 99 / iter1 next);
2100032110001130232100000111032101000...hear
iter1 hasNext;
2100000111032100000110032233hear
(equal 72 / iter1 next);
2100032100100030232100000111032101000...hear
iter1 hasNext;
2100000111032100000110032233hear
(equal 15 / iter1 next);
2100032111130232100000111032101000113...hear
not / iter1 hasNext;
210030232100000111032100000110032233hear
# There is Java code for COS_JListIterator available

60. class translation 'COS_JDoor'

# Sun Mar 23 02:45:10 CET 2014
# Produced by Fritzifier, based on JasminVisitor
# Using BCEL library to read Java bytecode
# Here is the original code:
# 
# public class COS_JDoor {
#     private COS_JRoom src, dest;
#     private String src_cmd, dest_cmd;
# 
#     public COS_JDoor(COS_JRoom src, String src_cmd,
#              COS_JRoom dest, String dest_cmd) {
#     this.src = src;
#     this.dest = dest;
#     this.src_cmd = src_cmd;
#     this.dest_cmd = dest_cmd;
#     src.addDoor(this);
#     dest.addDoor(this);
#     }
# 
#     public COS_JRoom apply(COS_JRoom src, String cmd) {
#     if (src == this.src) {
#         if (src_cmd.equals(cmd)) {
#         return this.dest;
#         }
#     }
#     if (src == this.dest) {
#         if (dest_cmd.equals(cmd)) {
#         return this.src;
#         }
#     }
#     return null;
#     }
# 
#     public COS_JRoom apply(COS_JRoom src) {
#     if (src==this.src) {
#         return this.dest;
#     }
#     if (src==this.dest) {
#         return this.src;
#     }
#     return null;
#     }
# }
class COS_JDoor ()
   (field super-ref (make-cell 0))
   (method new (set! (super-ref) ((java lang Object) / this)))
   (method super (? x / (get! / super-ref) / x))
   (method unknown (? x / self super / x))
   (field src (cell new 0))
   (field dest (cell new 0))
   (field src_cmd (cell new 0))
   (field dest_cmd (cell new 0))
   (method <init>-COS_JRoom-String-COS_JRoom-String-V
     (lambda (arg0 arg1 arg2 arg3) /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)) (pair 1 (arg0)) (pair 2 (arg1)) (pair 3 (arg2)) (pair 4 (arg3)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm aload 0))
         ((= (x) 1) (jvm invokespecial <init>-V 0 0))
         ((= (x) 2) (jvm aload 0))
         ((= (x) 3) (jvm aload 1))
         ((= (x) 4) (jvm putfield src (COS_JRoom)))
         ((= (x) 5) (jvm aload 0))
         ((= (x) 6) (jvm aload 3))
         ((= (x) 7) (jvm putfield dest (COS_JRoom)))
         ((= (x) 8) (jvm aload 0))
         ((= (x) 9) (jvm aload 2))
         ((= (x) 10) (jvm putfield src_cmd (java lang String)))
         ((= (x) 11) (jvm aload 0))
         ((= (x) 12) (jvm aload 4))
         ((= (x) 13) (jvm putfield dest_cmd (java lang String)))
         ((= (x) 14) (jvm aload 1))
         ((= (x) 15) (jvm aload 0))
         ((= (x) 16) (jvm invokevirtual addDoor-COS_JDoor-V 1 0))
         ((= (x) 17) (jvm aload 3))
         ((= (x) 18) (jvm aload 0))
         ((= (x) 19) (jvm invokevirtual addDoor-COS_JDoor-V 1 0))
         ((= (x) 20) (jvm return))
         (jvm return))
   )

   (method <init> (self <init>-COS_JRoom-String-COS_JRoom-String-V))

   (method apply-COS_JRoom-String-COS_JRoom
     (lambda (arg0 arg1) /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)) (pair 1 (arg0)) (pair 2 (arg1)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm aload 1))
         ((= (x) 1) (jvm aload 0))
         ((= (x) 2) (jvm getfield src (COS_JRoom)))
         ((= (x) 3) (jvm if_acmpne 12))
         ((= (x) 4) (jvm aload 0))
         ((= (x) 5) (jvm getfield src_cmd (java lang String)))
         ((= (x) 6) (jvm aload 2))
         ((= (x) 7) (jvm invokevirtual equals-Object-Z 1 1))
         ((= (x) 8) (jvm ifeq 12))
         ((= (x) 9) (jvm aload 0))
         ((= (x) 10) (jvm getfield dest (COS_JRoom)))
         ((= (x) 11) (jvm areturn))
         ((= (x) 12) (jvm aload 1))
         ((= (x) 13) (jvm aload 0))
         ((= (x) 14) (jvm getfield dest (COS_JRoom)))
         ((= (x) 15) (jvm if_acmpne 24))
         ((= (x) 16) (jvm aload 0))
         ((= (x) 17) (jvm getfield dest_cmd (java lang String)))
         ((= (x) 18) (jvm aload 2))
         ((= (x) 19) (jvm invokevirtual equals-Object-Z 1 1))
         ((= (x) 20) (jvm ifeq 24))
         ((= (x) 21) (jvm aload 0))
         ((= (x) 22) (jvm getfield src (COS_JRoom)))
         ((= (x) 23) (jvm areturn))
         ((= (x) 24) (jvm aconst_null))
         ((= (x) 25) (jvm areturn))
         (jvm return))
   )

   (method apply (self apply-COS_JRoom-String-COS_JRoom))

   (method apply-COS_JRoom-COS_JRoom
     (lambda (arg0) /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)) (pair 1 (arg0)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm aload 1))
         ((= (x) 1) (jvm aload 0))
         ((= (x) 2) (jvm getfield src (COS_JRoom)))
         ((= (x) 3) (jvm if_acmpne 7))
         ((= (x) 4) (jvm aload 0))
         ((= (x) 5) (jvm getfield dest (COS_JRoom)))
         ((= (x) 6) (jvm areturn))
         ((= (x) 7) (jvm aload 1))
         ((= (x) 8) (jvm aload 0))
         ((= (x) 9) (jvm getfield dest (COS_JRoom)))
         ((= (x) 10) (jvm if_acmpne 14))
         ((= (x) 11) (jvm aload 0))
         ((= (x) 12) (jvm getfield src (COS_JRoom)))
         ((= (x) 13) (jvm areturn))
         ((= (x) 14) (jvm aconst_null))
         ((= (x) 15) (jvm areturn))
         (jvm return))
   )

 ;
2110110003210000011113232211011101321...hear

61. class translation 'COS_JThing'

# Sun Mar 23 02:45:11 CET 2014
# Produced by Fritzifier, based on JasminVisitor
# Using BCEL library to read Java bytecode
# Here is the original code:
# 
# public class COS_JThing extends COS_JNamed {
#     private COS_JRoom location;
#     private COS_JRoom nextLocation;
# 
#     public void setRoom(COS_JRoom location) {
#     if (this.location!=null) {
#         this.location.removeThing(this);
#     }
#     this.location = location;
#     location.addThing(this);
#     this.nextLocation = location;
#     }
#     
#     public COS_JRoom getRoom() {
#     return location;
#     }
# 
#     public void setNextRoom(COS_JRoom location) {
#     nextLocation = location;
#     }
# 
#     public void postUpdate() {
#     if (nextLocation!=location) {
#         setRoom(nextLocation);
#     }
#     }
# }
# 
class COS_JThing ()
   (field super-ref (make-cell 0))
   (method new (set! (super-ref) ((COS_JNamed) / this)))
   (method super (? x / (get! / super-ref) / x))
   (method unknown (? x / self super / x))
   (field location (cell new 0))
   (field nextLocation (cell new 0))
   (method <init>-V
     (lambda () /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm aload 0))
         ((= (x) 1) (jvm invokespecial <init>-V 0 0))
         ((= (x) 2) (jvm return))
         (jvm return))
   )

   (method <init> (self <init>-V))

   (method setRoom-COS_JRoom-V
     (lambda (arg0) /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)) (pair 1 (arg0)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm aload 0))
         ((= (x) 1) (jvm getfield location (COS_JRoom)))
         ((= (x) 2) (jvm ifnull 7))
         ((= (x) 3) (jvm aload 0))
         ((= (x) 4) (jvm getfield location (COS_JRoom)))
         ((= (x) 5) (jvm aload 0))
         ((= (x) 6) (jvm invokevirtual removeThing-COS_JThing-V 1 0))
         ((= (x) 7) (jvm aload 0))
         ((= (x) 8) (jvm aload 1))
         ((= (x) 9) (jvm putfield location (COS_JRoom)))
         ((= (x) 10) (jvm aload 1))
         ((= (x) 11) (jvm aload 0))
         ((= (x) 12) (jvm invokevirtual addThing-COS_JThing-V 1 0))
         ((= (x) 13) (jvm aload 0))
         ((= (x) 14) (jvm aload 1))
         ((= (x) 15) (jvm putfield nextLocation (COS_JRoom)))
         ((= (x) 16) (jvm return))
         (jvm return))
   )

   (method setRoom (self setRoom-COS_JRoom-V))

   (method getRoom-COS_JRoom
     (lambda () /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm aload 0))
         ((= (x) 1) (jvm getfield location (COS_JRoom)))
         ((= (x) 2) (jvm areturn))
         (jvm return))
   )

   (method getRoom (self getRoom-COS_JRoom))

   (method setNextRoom-COS_JRoom-V
     (lambda (arg0) /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)) (pair 1 (arg0)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm aload 0))
         ((= (x) 1) (jvm aload 1))
         ((= (x) 2) (jvm putfield nextLocation (COS_JRoom)))
         ((= (x) 3) (jvm return))
         (jvm return))
   )

   (method setNextRoom (self setNextRoom-COS_JRoom-V))

   (method postUpdate-V
     (lambda () /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm aload 0))
         ((= (x) 1) (jvm getfield nextLocation (COS_JRoom)))
         ((= (x) 2) (jvm aload 0))
         ((= (x) 3) (jvm getfield location (COS_JRoom)))
         ((= (x) 4) (jvm if_acmpeq 9))
         ((= (x) 5) (jvm aload 0))
         ((= (x) 6) (jvm aload 0))
         ((= (x) 7) (jvm getfield nextLocation (COS_JRoom)))
         ((= (x) 8) (jvm invokevirtual setRoom-COS_JRoom-V 1 0))
         ((= (x) 9) (jvm return))
         (jvm return))
   )

   (method postUpdate (self postUpdate-V))

 ;
2110110003210000110003232211011101321...hear

62. class translation 'COS_JRoom'

# Sun Mar 23 02:45:12 CET 2014
# Produced by Fritzifier, based on JasminVisitor
# Using BCEL library to read Java bytecode
# Here is the original code:
# 
# import java.util.Iterator;
# 
# public class COS_JRoom extends COS_JNamed {
#     //private COS_JList content = new COS_JList();
#     //private COS_JList doors = new COS_JList();
# 
#     private COS_JList content;
#     private COS_JList doors;
# 
#     public COS_JRoom() {
#     content = new COS_JList();
#     doors = new COS_JList();
#     }
# 
#     public COS_JList get() {
#     return content;
#     }
# 
#     public Iterator getDoors() {
#     return doors.iterator();
#     }
# 
#     public void addDoor(COS_JDoor door) {
#     //System.out.println("add door -> " + getName());
#     doors.add(door);
#     }
# 
#     public void addThing(COS_JThing thing) {
#     content.add(thing);
#     }
# 
#     public void removeThing(COS_JThing thing) {
#     content.remove(thing);
#     }
# }
class COS_JRoom ()
   (field super-ref (make-cell 0))
   (method new (set! (super-ref) ((COS_JNamed) / this)))
   (method super (? x / (get! / super-ref) / x))
   (method unknown (? x / self super / x))
   (field content (cell new 0))
   (field doors (cell new 0))
   (method <init>-V
     (lambda () /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm aload 0))
         ((= (x) 1) (jvm invokespecial <init>-V 0 0))
         ((= (x) 2) (jvm aload 0))
         ((= (x) 3) (jvm new (COS_JList)))
         ((= (x) 4) (jvm dup))
         ((= (x) 5) (jvm invokespecial <init>-V 0 0))
         ((= (x) 6) (jvm putfield content (COS_JList)))
         ((= (x) 7) (jvm aload 0))
         ((= (x) 8) (jvm new (COS_JList)))
         ((= (x) 9) (jvm dup))
         ((= (x) 10) (jvm invokespecial <init>-V 0 0))
         ((= (x) 11) (jvm putfield doors (COS_JList)))
         ((= (x) 12) (jvm return))
         (jvm return))
   )

   (method <init> (self <init>-V))

   (method get-COS_JList
     (lambda () /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm aload 0))
         ((= (x) 1) (jvm getfield content (COS_JList)))
         ((= (x) 2) (jvm areturn))
         (jvm return))
   )

   (method get (self get-COS_JList))

   (method getDoors-Iterator
     (lambda () /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm aload 0))
         ((= (x) 1) (jvm getfield doors (COS_JList)))
         ((= (x) 2) (jvm invokevirtual iterator-Iterator 0 1))
         ((= (x) 3) (jvm areturn))
         (jvm return))
   )

   (method getDoors (self getDoors-Iterator))

   (method addDoor-COS_JDoor-V
     (lambda (arg0) /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)) (pair 1 (arg0)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm aload 0))
         ((= (x) 1) (jvm getfield doors (COS_JList)))
         ((= (x) 2) (jvm aload 1))
         ((= (x) 3) (jvm invokevirtual add-Object-V 1 0))
         ((= (x) 4) (jvm return))
         (jvm return))
   )

   (method addDoor (self addDoor-COS_JDoor-V))

   (method addThing-COS_JThing-V
     (lambda (arg0) /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)) (pair 1 (arg0)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm aload 0))
         ((= (x) 1) (jvm getfield content (COS_JList)))
         ((= (x) 2) (jvm aload 1))
         ((= (x) 3) (jvm invokevirtual add-Object-V 1 0))
         ((= (x) 4) (jvm return))
         (jvm return))
   )

   (method addThing (self addThing-COS_JThing-V))

   (method removeThing-COS_JThing-V
     (lambda (arg0) /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)) (pair 1 (arg0)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm aload 0))
         ((= (x) 1) (jvm getfield content (COS_JList)))
         ((= (x) 2) (jvm aload 1))
         ((= (x) 3) (jvm invokevirtual remove-Object-Z 1 1))
         ((= (x) 4) (jvm pop))
         ((= (x) 5) (jvm return))
         (jvm return))
   )

   (method removeThing (self removeThing-COS_JThing-V))

 ;
2110110003210000101003232211011101321...hear

63. class translation 'COS_JNamed'

# Sun Mar 23 02:45:13 CET 2014
# Produced by Fritzifier, based on JasminVisitor
# Using BCEL library to read Java bytecode
# Here is the original code:
# 
# public class COS_JNamed {
#     private String name = "-";
#     private COS_JWorld world = null;
# 
#     void setName(String name) {
#     this.name = name;
#     }
# 
#     String getName() {
#     return name;
#     }
# 
#     void setWorld(COS_JWorld world) {
#     this.world = world;
#     }
# 
#     COS_JWorld getWorld() {
#     return world;
#     }
# 
#     void update() {
#     }
# 
#     void postUpdate() {
#     }
# }
class COS_JNamed ()
   (field super-ref (make-cell 0))
   (method new (set! (super-ref) ((java lang Object) / this)))
   (method super (? x / (get! / super-ref) / x))
   (method unknown (? x / self super / x))
   (field name (cell new 0))
   (field world (cell new 0))
   (method <init>-V
     (lambda () /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm aload 0))
         ((= (x) 1) (jvm invokespecial <init>-V 0 0))
         ((= (x) 2) (jvm aload 0))
         ((= (x) 3) (jvm ldc (String new int-init "-")))
         ((= (x) 4) (jvm putfield name (java lang String)))
         ((= (x) 5) (jvm aload 0))
         ((= (x) 6) (jvm aconst_null))
         ((= (x) 7) (jvm putfield world (COS_JWorld)))
         ((= (x) 8) (jvm return))
         (jvm return))
   )

   (method <init> (self <init>-V))

   (method setName-String-V
     (lambda (arg0) /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)) (pair 1 (arg0)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm aload 0))
         ((= (x) 1) (jvm aload 1))
         ((= (x) 2) (jvm putfield name (java lang String)))
         ((= (x) 3) (jvm return))
         (jvm return))
   )

   (method setName (self setName-String-V))

   (method getName-String
     (lambda () /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm aload 0))
         ((= (x) 1) (jvm getfield name (java lang String)))
         ((= (x) 2) (jvm areturn))
         (jvm return))
   )

   (method getName (self getName-String))

   (method setWorld-COS_JWorld-V
     (lambda (arg0) /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)) (pair 1 (arg0)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm aload 0))
         ((= (x) 1) (jvm aload 1))
         ((= (x) 2) (jvm putfield world (COS_JWorld)))
         ((= (x) 3) (jvm return))
         (jvm return))
   )

   (method setWorld (self setWorld-COS_JWorld-V))

   (method getWorld-COS_JWorld
     (lambda () /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm aload 0))
         ((= (x) 1) (jvm getfield world (COS_JWorld)))
         ((= (x) 2) (jvm areturn))
         (jvm return))
   )

   (method getWorld (self getWorld-COS_JWorld))

   (method update-V
     (lambda () /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm return))
         (jvm return))
   )

   (method update (self update-V))

   (method postUpdate-V
     (lambda () /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm return))
         (jvm return))
   )

   (method postUpdate (self postUpdate-V))

 ;
2110110003210000110013232211011101321...hear

64. class translation 'COS_JWorld'

# Sun Mar 23 02:45:14 CET 2014
# Produced by Fritzifier, based on JasminVisitor
# Using BCEL library to read Java bytecode
# Here is the original code:
# 
# import java.util.Iterator;
# 
# public class COS_JWorld {
#     private COS_JHashMap content;
#     private COS_JList inventory;
# 
#     public COS_JWorld() {
#     content = new COS_JHashMap();
#     inventory = new COS_JList();
#     }
# 
#     public void add(COS_JNamed named, String name) {
#     named.setName(name);
#     content.put(named.getName(),named);
#     inventory.add(named);
#     }
# 
#     public COS_JNamed get(String name) {
#     return (COS_JNamed)content.get(new String(name));
#     }
# 
#     public void update() {
#     for (Iterator i = inventory.iterator(); i.hasNext(); ) {
#         COS_JNamed o = (COS_JNamed) i.next();
#         o.update();
#     }
#     for (Iterator i = inventory.iterator(); i.hasNext(); ) {
#         COS_JNamed o = (COS_JNamed) i.next();
#         o.postUpdate();
#     }
#     }
# }
class COS_JWorld ()
   (field super-ref (make-cell 0))
   (method new (set! (super-ref) ((java lang Object) / this)))
   (method super (? x / (get! / super-ref) / x))
   (method unknown (? x / self super / x))
   (field content (cell new 0))
   (field inventory (cell new 0))
   (method <init>-V
     (lambda () /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm aload 0))
         ((= (x) 1) (jvm invokespecial <init>-V 0 0))
         ((= (x) 2) (jvm aload 0))
         ((= (x) 3) (jvm new (COS_JHashMap)))
         ((= (x) 4) (jvm dup))
         ((= (x) 5) (jvm invokespecial <init>-V 0 0))
         ((= (x) 6) (jvm putfield content (COS_JHashMap)))
         ((= (x) 7) (jvm aload 0))
         ((= (x) 8) (jvm new (COS_JList)))
         ((= (x) 9) (jvm dup))
         ((= (x) 10) (jvm invokespecial <init>-V 0 0))
         ((= (x) 11) (jvm putfield inventory (COS_JList)))
         ((= (x) 12) (jvm return))
         (jvm return))
   )

   (method <init> (self <init>-V))

   (method add-COS_JNamed-String-V
     (lambda (arg0 arg1) /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)) (pair 1 (arg0)) (pair 2 (arg1)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm aload 1))
         ((= (x) 1) (jvm aload 2))
         ((= (x) 2) (jvm invokevirtual setName-String-V 1 0))
         ((= (x) 3) (jvm aload 0))
         ((= (x) 4) (jvm getfield content (COS_JHashMap)))
         ((= (x) 5) (jvm aload 1))
         ((= (x) 6) (jvm invokevirtual getName-String 0 1))
         ((= (x) 7) (jvm aload 1))
         ((= (x) 8) (jvm invokevirtual put-Object-Object-V 2 0))
         ((= (x) 9) (jvm aload 0))
         ((= (x) 10) (jvm getfield inventory (COS_JList)))
         ((= (x) 11) (jvm aload 1))
         ((= (x) 12) (jvm invokevirtual add-Object-V 1 0))
         ((= (x) 13) (jvm return))
         (jvm return))
   )

   (method add (self add-COS_JNamed-String-V))

   (method get-String-COS_JNamed
     (lambda (arg0) /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)) (pair 1 (arg0)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm aload 0))
         ((= (x) 1) (jvm getfield content (COS_JHashMap)))
         ((= (x) 2) (jvm new (java lang String)))
         ((= (x) 3) (jvm dup))
         ((= (x) 4) (jvm aload 1))
         ((= (x) 5) (jvm invokespecial <init>-String-V 1 0))
         ((= (x) 6) (jvm invokevirtual get-Object-Object 1 1))
         ((= (x) 7) (jvm checkcast (COS_JNamed)))
         ((= (x) 8) (jvm areturn))
         (jvm return))
   )

   (method get (self get-String-COS_JNamed))

   (method update-V
     (lambda () /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm aload 0))
         ((= (x) 1) (jvm getfield inventory (COS_JList)))
         ((= (x) 2) (jvm invokevirtual iterator-Iterator 0 1))
         ((= (x) 3) (jvm astore 1))
         ((= (x) 4) (jvm aload 1))
         ((= (x) 5) (jvm invokeinterface hasNext-Z 0 1 1))
         ((= (x) 6) (jvm ifeq 14))
         ((= (x) 7) (jvm aload 1))
         ((= (x) 8) (jvm invokeinterface next-Object 0 1 1))
         ((= (x) 9) (jvm checkcast (COS_JNamed)))
         ((= (x) 10) (jvm astore 2))
         ((= (x) 11) (jvm aload 2))
         ((= (x) 12) (jvm invokevirtual update-V 0 0))
         ((= (x) 13) (jvm goto 4))
         ((= (x) 14) (jvm aload 0))
         ((= (x) 15) (jvm getfield inventory (COS_JList)))
         ((= (x) 16) (jvm invokevirtual iterator-Iterator 0 1))
         ((= (x) 17) (jvm astore 1))
         ((= (x) 18) (jvm aload 1))
         ((= (x) 19) (jvm invokeinterface hasNext-Z 0 1 1))
         ((= (x) 20) (jvm ifeq 28))
         ((= (x) 21) (jvm aload 1))
         ((= (x) 22) (jvm invokeinterface next-Object 0 1 1))
         ((= (x) 23) (jvm checkcast (COS_JNamed)))
         ((= (x) 24) (jvm astore 2))
         ((= (x) 25) (jvm aload 2))
         ((= (x) 26) (jvm invokevirtual postUpdate-V 0 0))
         ((= (x) 27) (jvm goto 18))
         ((= (x) 28) (jvm return))
         (jvm return))
   )

   (method update (self update-V))

 ;
2110110003210001011013232211011101321...hear

65. class translation 'COS_JRobo'

# Sun Mar 23 02:45:16 CET 2014
# Produced by Fritzifier, based on JasminVisitor
# Using BCEL library to read Java bytecode
# Here is the original code:
# 
# import java.util.Iterator;
# 
# public class COS_JRobo extends COS_JThing {
#     private COS_JHashMap times;
#     private int now;
# 
#     public COS_JRobo() {
#     times = new COS_JHashMap();
#     now = 1;
#     }
# 
#     public void update() {
#     COS_JRoom location = getRoom();
#     //System.out.println("Updating robo...");
#     if (location!=null) {
#         int oldestTime = now;
#         COS_JDoor oldestDoor = null;
#         for (Iterator i = location.getDoors(); i.hasNext(); ) {
#         COS_JDoor door = (COS_JDoor) i.next();
#         //System.out.println(" scanning door ");
#         Integer t = (Integer)times.get(door);
#         int v = 0;
#         if (t!=null) {
#             v = t.intValue();
#         }
#         if (v<oldestTime) {
#             oldestTime = v;
#             oldestDoor = door;
#         }
#         }
#         if (oldestDoor!=null) {
#         times.put(oldestDoor,new Integer(now));
#         setNextRoom(oldestDoor.apply(location));
#         }
#     }
#     now++;
#     }
# }
# 
class COS_JRobo ()
   (field super-ref (make-cell 0))
   (method new (set! (super-ref) ((COS_JThing) / this)))
   (method super (? x / (get! / super-ref) / x))
   (method unknown (? x / self super / x))
   (field times (cell new 0))
   (field now ((int) new))
   (method <init>-V
     (lambda () /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm aload 0))
         ((= (x) 1) (jvm invokespecial <init>-V 0 0))
         ((= (x) 2) (jvm aload 0))
         ((= (x) 3) (jvm new (COS_JHashMap)))
         ((= (x) 4) (jvm dup))
         ((= (x) 5) (jvm invokespecial <init>-V 0 0))
         ((= (x) 6) (jvm putfield times (COS_JHashMap)))
         ((= (x) 7) (jvm aload 0))
         ((= (x) 8) (jvm iconst 1))
         ((= (x) 9) (jvm putfield now (int)))
         ((= (x) 10) (jvm return))
         (jvm return))
   )

   (method <init> (self <init>-V))

   (method update-V
     (lambda () /
      let ((vars / cell new / make-hash / vector
                    (pair 0 (self)))
           (stack / cell new / vector)) /
      state-machine (vars) (stack) / ? jvm / ? x / cond
         ((= (x) 0) (jvm aload 0))
         ((= (x) 1) (jvm invokevirtual getRoom-COS_JRoom 0 1))
         ((= (x) 2) (jvm astore 1))
         ((= (x) 3) (jvm aload 1))
         ((= (x) 4) (jvm ifnull 57))
         ((= (x) 5) (jvm aload 0))
         ((= (x) 6) (jvm getfield now (int)))
         ((= (x) 7) (jvm istore 2))
         ((= (x) 8) (jvm aconst_null))
         ((= (x) 9) (jvm astore 3))
         ((= (x) 10) (jvm aload 1))
         ((= (x) 11) (jvm invokevirtual getDoors-Iterator 0 1))
         ((= (x) 12) (jvm astore 4))
         ((= (x) 13) (jvm aload 4))
         ((= (x) 14) (jvm invokeinterface hasNext-Z 0 1 1))
         ((= (x) 15) (jvm ifeq 41))
         ((= (x) 16) (jvm aload 4))
         ((= (x) 17) (jvm invokeinterface next-Object 0 1 1))
         ((= (x) 18) (jvm checkcast (COS_JDoor)))
         ((= (x) 19) (jvm astore 5))
         ((= (x) 20) (jvm aload 0))
         ((= (x) 21) (jvm getfield times (COS_JHashMap)))
         ((= (x) 22) (jvm aload 5))
         ((= (x) 23) (jvm invokevirtual get-Object-Object 1 1))
         ((= (x) 24) (jvm checkcast (java lang Integer)))
         ((= (x) 25) (jvm astore 6))
         ((= (x) 26) (jvm iconst 0))
         ((= (x) 27) (jvm istore 7))
         ((= (x) 28) (jvm aload 6))
         ((= (x) 29) (jvm ifnull 33))
         ((= (x) 30) (jvm aload 6))
         ((= (x) 31) (jvm invokevirtual intValue-I 0 1))
         ((= (x) 32) (jvm istore 7))
         ((= (x) 33) (jvm iload 7))
         ((= (x) 34) (jvm iload 2))
         ((= (x) 35) (jvm if_icmpge 40))
         ((= (x) 36) (jvm iload 7))
         ((= (x) 37) (jvm istore 2))
         ((= (x) 38) (jvm aload 5))
         ((= (x) 39) (jvm astore 3))
         ((= (x) 40) (jvm goto 13))
         ((= (x) 41) (jvm aload 3))
         ((= (x) 42) (jvm ifnull 57))
         ((= (x) 43) (jvm aload 0))
         ((= (x) 44) (jvm getfield times (COS_JHashMap)))
         ((= (x) 45) (jvm aload 3))
         ((= (x) 46) (jvm new (java lang Integer)))
         ((= (x) 47) (jvm dup))
         ((= (x) 48) (jvm aload 0))
         ((= (x) 49) (jvm getfield now (int)))
         ((= (x) 50) (jvm invokespecial <init>-I-V 1 0))
         ((= (x) 51) (jvm invokevirtual put-Object-Object-V 2 0))
         ((= (x) 52) (jvm aload 0))
         ((= (x) 53) (jvm aload 3))
         ((= (x) 54) (jvm aload 1))
         ((= (x) 55) (jvm invokevirtual apply-COS_JRoom-COS_JRoom 1 1))
         ((= (x) 56) (jvm invokevirtual setNextRoom-COS_JRoom-V 1 0))
         ((= (x) 57) (jvm aload 0))
         ((= (x) 58) (jvm dup))
         ((= (x) 59) (jvm getfield now (int)))
         ((= (x) 60) (jvm iconst 1))
         ((= (x) 61) (jvm iadd))
         ((= (x) 62) (jvm putfield now (int)))
         ((= (x) 63) (jvm return))
         (jvm return))
   )

   (method update (self update-V))

 ;
2110110003210001110013232211011101321...hear

66. test JRoom, JDoor, JThing, etc

define s (? x / String new int-init / x);
2110132100011110132211003210010130232...hear
define room1 (COS_JRoom new <init>);
2110132100011111032210000101003211001...hear
define room2 (COS_JRoom new <init>);
2110132100011111132210000101003211001...hear
define door12 (COS_JDoor new <init> 
              (room1) (s "south") (room2) (s "north"));
2110132100100000032210000011113211001...hear
define jworld (COS_JWorld new <init>);
2110132100100000132210001011013211001...hear
define thing1 (COS_JThing new <init>);
2110132100100001032210000110003211001...hear
define robo1 (COS_JRobo new <init>);
2110132100100001132210001110013211001...hear
act / jworld add (thing1) / s "bus";
2101110100302321001000001321100100322...hear
act / jworld add (robo1) / s "autobus";
2101110100302321001000001321100100322...hear
act / jworld add (room1) / s "boston";
2101110100302321001000001321100100322...hear
act / jworld add (room2) / s "newyork";
2101110100302321001000001321100100322...hear
begin (room1 get add (room1))
       (= 1 / room1 get size);
2100000003221000111110321110101032110...hear
= 1 / room1 get size;
2103213023210001111103211101010321000...hear
= 0 / room2 get size;
2103203023210001111113211101010321000...hear
act / thing1 setRoom (room1);
2101110100302321001000010321000011110...hear
= 2 / room1 get size;
2103210302321000111110321110101032100...hear
= 0 / room2 get size;
2103203023210001111113211101010321000...hear
act / thing1 setRoom (room2);
2101110100302321001000010321000011110...hear
room1 get size;
21000111110321110101032100000001132233hear
room2 get size;
21000111111321110101032100000001132233hear
thing1 equals (thing1);
2100100001032101110011322100100001033...hear
room1 equals (room1);
2100011111032101110011322100011111033...hear
not / thing1 equals (room1);
2100302321001000010321011100113221000...hear
(equal "newyork" / door12 apply (room1) (s "south") getName intValue);
2100032100001101001000010001101100101...hear
(equal "boston" / door12 apply (room2) (s "north") getName intValue);
2100032100011001000101110010000100100...hear
define o
  (? x / jworld get / s / x);
2110132101111011322110032100101302321...hear
= "newyork" / (o "bus") getRoom getName intValue;
2103210000110100100001000110110010100...hear
act / robo1 setRoom (room1);
2101110100302321001000011321000011110...hear
(equal "boston" / (o "autobus") getRoom getName intValue);
2100032100011001000101110010000100100...hear
act / jworld update;
2101110100302321001000001321000010013...hear
(equal "newyork" / (o "autobus") getRoom getName intValue);
2100032100001101001000010001101100101...hear
Fork me on GitHub