# Author: Paul Fitzpatrick, paulfitz@ai.mit.edu # Copyright (c) 2003 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 # # MATH introduce numbers (in unary notation) (7 (8 0)); (7 (8 1 0)); (7 (8 1 1 0)); (7 (8 1 1 1 0)); (7 (8 1 1 1 1 0)); (7 (8 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 0)); (7 (8 1 1 1 1 0)); (7 (8 1 1 1 0)); (7 (8 1 1 0)); (7 (8 1 0)); (7 (8 0)); (7 (8 0)); (7 (8 1 0)); (7 (8 1 1 0)); (7 (8 1 1 1 0)); (7 (8 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 0)); (7 (8 1 0)); (7 (8 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (7 (8 0)); (7 (8 1 0)); (7 (8 1 1 1 1 1 1 1 1 0)); (7 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); # MATH now show equality (7 5); (5 (8 0) (8 0)); (5 (8 1 1 1 1 0) (8 1 1 1 1 0)); (5 (8 1 1 1 1 1 1 0) (8 1 1 1 1 1 1 0)); (5 (8 1 1 0) (8 1 1 0)); (5 (8 1 1 1 0) (8 1 1 1 0)); # MATH now show other relational operators (7 12); (12 (8 1 1 1 0) (8 1 0)); (12 (8 1 0) (8 0)); (12 (8 1 1 1 1 1 1 0) (8 0)); (12 (8 1 1 1 1 0) (8 0)); (12 (8 1 1 1 1 1 0) (8 0)); (12 (8 1 1 1 1 0) (8 0)); (12 (8 1 0) (8 0)); (12 (8 1 1 1 1 1 1 0) (8 1 0)); (12 (8 1 1 1 1 1 1 0) (8 1 1 0)); (12 (8 1 1 1 0) (8 1 0)); (12 (8 1 1 1 1 1 0) (8 0)); (7 11); (11 (8 0) (8 1 1 1 1 1 1 0)); (11 (8 0) (8 1 0)); (11 (8 0) (8 1 0)); (11 (8 0) (8 1 1 0)); (11 (8 1 0) (8 1 1 1 0)); (11 (8 0) (8 1 1 0)); (11 (8 1 1 0) (8 1 1 1 1 0)); (11 (8 1 1 1 0) (8 1 1 1 1 1 0)); (11 (8 0) (8 1 1 0)); (11 (8 0) (8 1 1 1 1 1 0)); (11 (8 1 1 1 0) (8 1 1 1 1 1 1 0)); (11 (8 1 1 0) (8 1 1 1 0)); (12 (8 1 1 0) (8 1 0)); (12 (8 1 1 1 1 1 0) (8 1 0)); (5 (8 1 1 1 0) (8 1 1 1 0)); (5 (8 1 1 1 0) (8 1 1 1 0)); (12 (8 1 0) (8 0)); (11 (8 1 0) (8 1 1 1 1 0)); (5 (8 1 1 1 1 0) (8 1 1 1 1 0)); (12 (8 1 1 1 0) (8 1 1 0)); (5 (8 1 1 1 0) (8 1 1 1 0)); (11 (8 1 1 1 0) (8 1 1 1 1 1 0)); # MATH introduce the NOT logical operator (7 6); (5 (8 1 0) (8 1 0)); (6 (11 (8 1 0) (8 1 0))); (6 (12 (8 1 0) (8 1 0))); (5 (8 1 1 1 0) (8 1 1 1 0)); (6 (11 (8 1 1 1 0) (8 1 1 1 0))); (6 (12 (8 1 1 1 0) (8 1 1 1 0))); (5 (8 0) (8 0)); (6 (11 (8 0) (8 0))); (6 (12 (8 0) (8 0))); (5 (8 1 1 1 0) (8 1 1 1 0)); (6 (11 (8 1 1 1 0) (8 1 1 1 0))); (6 (12 (8 1 1 1 0) (8 1 1 1 0))); (5 (8 1 0) (8 1 0)); (6 (11 (8 1 0) (8 1 0))); (6 (12 (8 1 0) (8 1 0))); (5 (8 1 1 1 1 1 0) (8 1 1 1 1 1 0)); (6 (11 (8 1 1 1 1 1 0) (8 1 1 1 1 1 0))); (6 (12 (8 1 1 1 1 1 0) (8 1 1 1 1 1 0))); (6 (5 (8 1 0) (8 1 1 1 1 0))); (11 (8 1 0) (8 1 1 1 1 0)); (6 (12 (8 1 0) (8 1 1 1 1 0))); (6 (5 (8 1 1 0) (8 1 1 1 1 0))); (11 (8 1 1 0) (8 1 1 1 1 0)); (6 (12 (8 1 1 0) (8 1 1 1 1 0))); (6 (5 (8 1 1 1 1 1 0) (8 1 1 1 1 1 1 1 0))); (11 (8 1 1 1 1 1 0) (8 1 1 1 1 1 1 1 0)); (6 (12 (8 1 1 1 1 1 0) (8 1 1 1 1 1 1 1 0))); (6 (5 (8 1 1 1 1 1 0) (8 1 1 1 1 1 1 1 0))); (11 (8 1 1 1 1 1 0) (8 1 1 1 1 1 1 1 0)); (6 (12 (8 1 1 1 1 1 0) (8 1 1 1 1 1 1 1 0))); (6 (5 (8 1 0) (8 1 1 1 0))); (11 (8 1 0) (8 1 1 1 0)); (6 (12 (8 1 0) (8 1 1 1 0))); (6 (5 (8 1 1 1 1 1 0) (8 1 1 1 1 1 1 0))); (11 (8 1 1 1 1 1 0) (8 1 1 1 1 1 1 0)); (6 (12 (8 1 1 1 1 1 0) (8 1 1 1 1 1 1 0))); (6 (5 (8 1 1 1 1 1 0) (8 1 1 1 1 0))); (12 (8 1 1 1 1 1 0) (8 1 1 1 1 0)); (6 (11 (8 1 1 1 1 1 0) (8 1 1 1 1 0))); (6 (5 (8 1 1 1 1 1 1 1 0) (8 1 1 1 1 1 0))); (12 (8 1 1 1 1 1 1 1 0) (8 1 1 1 1 1 0)); (6 (11 (8 1 1 1 1 1 1 1 0) (8 1 1 1 1 1 0))); (6 (5 (8 1 1 1 1 1 1 1 0) (8 1 1 1 1 1 0))); (12 (8 1 1 1 1 1 1 1 0) (8 1 1 1 1 1 0)); (6 (11 (8 1 1 1 1 1 1 1 0) (8 1 1 1 1 1 0))); (6 (5 (8 1 1 1 0) (8 1 0))); (12 (8 1 1 1 0) (8 1 0)); (6 (11 (8 1 1 1 0) (8 1 0))); (6 (5 (8 1 1 1 1 1 1 1 0) (8 1 1 1 1 1 0))); (12 (8 1 1 1 1 1 1 1 0) (8 1 1 1 1 1 0)); (6 (11 (8 1 1 1 1 1 1 1 0) (8 1 1 1 1 1 0))); (6 (5 (8 1 1 1 1 1 1 0) (8 1 1 1 0))); (12 (8 1 1 1 1 1 1 0) (8 1 1 1 0)); (6 (11 (8 1 1 1 1 1 1 0) (8 1 1 1 0))); # MATH introduce the AND logical operator (7 13); (13 (11 (8 1 1 1 1 1 0) (8 1 1 1 1 1 1 1 0)) (12 (8 1 1 1 1 0) (8 1 1 1 0))); (13 (5 (8 1 0) (8 1 0)) (5 (8 1 1 1 1 1 0) (8 1 1 1 1 1 0))); (13 (12 (8 1 1 1 1 0) (8 1 1 1 0)) (12 (8 1 1 1 1 0) (8 1 0))); (13 (11 (8 1 1 1 1 1 0) (8 1 1 1 1 1 1 0)) (5 (8 1 1 1 1 1 0) (8 1 1 1 1 1 0))); (13 (12 (8 1 1 1 1 1 1 1 0) (8 1 1 1 1 1 0)) (5 (8 1 1 0) (8 1 1 0))); (13 (11 (8 1 1 1 0) (8 1 1 1 1 1 1 0)) (12 (8 1 1 1 1 1 0) (8 1 1 1 1 0))); (13 (5 (8 1 1 0) (8 1 1 0)) (11 (8 0) (8 1 1 0))); (13 (12 (8 1 1 1 1 1 0) (8 1 1 0)) (5 (8 1 1 0) (8 1 1 0))); (13 (11 (8 1 0) (8 1 1 1 1 0)) (5 (8 1 1 1 1 0) (8 1 1 1 1 0))); (13 (11 (8 1 0) (8 1 1 0)) (5 (8 1 1 0) (8 1 1 0))); (6 (13 (12 (8 1 1 1 1 0) (8 1 1 1 0)) (12 (8 0) (8 1 0)))); (6 (13 (11 (8 1 1 1 0) (8 1 1 1 1 1 0)) (5 (8 1 1 0) (8 1 1 1 1 0)))); (6 (13 (11 (8 1 1 1 1 0) (8 1 1 1 1 1 1 0)) (12 (8 1 0) (8 1 1 1 1 1 0)))); (6 (13 (11 (8 1 1 1 1 0) (8 1 1 1 1 1 1 0)) (5 (8 1 1 1 0) (8 1 1 1 1 1 0)))); (6 (13 (5 (8 1 0) (8 1 0)) (11 (8 1 1 1 1 1 0) (8 1 1 0)))); (6 (13 (12 (8 1 1 0) (8 1 1 1 0)) (11 (8 1 0) (8 1 1 1 0)))); (6 (13 (11 (8 1 1 1 1 1 1 0) (8 1 0)) (12 (8 1 1 1 0) (8 1 1 0)))); (6 (13 (5 (8 1 1 1 1 1 0) (8 1 1 1 1 0)) (12 (8 1 1 0) (8 0)))); (6 (13 (5 (8 1 0) (8 0)) (12 (8 1 1 1 1 1 1 1 0) (8 1 1 1 1 1 0)))); (6 (13 (12 (8 1 1 1 0) (8 1 1 1 1 1 0)) (11 (8 1 1 1 0) (8 1 1 1 1 1 1 0)))); (6 (13 (11 (8 1 1 1 1 1 0) (8 1 1 1 1 0)) (12 (8 1 1 1 1 1 1 0) (8 1 1 1 1 1 1 0)))); (6 (13 (5 (8 1 1 1 1 0) (8 0)) (12 (8 0) (8 1 1 1 0)))); (6 (13 (5 (8 1 1 1 1 1 0) (8 0)) (12 (8 1 1 1 0) (8 1 1 1 0)))); (6 (13 (12 (8 0) (8 1 1 1 1 0)) (12 (8 1 1 0) (8 1 1 0)))); (6 (13 (5 (8 0) (8 1 1 1 1 0)) (5 (8 1 1 1 1 1 0) (8 1 0)))); (6 (13 (11 (8 1 1 0) (8 1 1 1 1 0)) (11 (8 1 1 1 0) (8 1 0)))); (13 (11 (8 1 1 1 0) (8 1 1 1 1 1 1 0)) (12 (8 1 1 1 1 1 1 1 1 0) (8 1 1 1 1 1 0))); (6 (13 (12 (8 1 1 1 1 1 1 0) (8 1 1 1 0)) (12 (8 1 1 0) (8 1 1 1 0)))); (6 (13 (12 (8 1 0) (8 0)) (11 (8 1 1 1 0) (8 1 1 0)))); (13 (11 (8 0) (8 1 1 0)) (12 (8 1 0) (8 0))); (6 (13 (5 (8 1 1 1 1 0) (8 1 0)) (12 (8 0) (8 1 1 1 0)))); (6 (13 (12 (8 1 1 1 1 1 0) (8 1 1 1 1 1 1 0)) (5 (8 1 1 0) (8 1 1 0)))); (6 (13 (5 (8 1 1 0) (8 1 0)) (12 (8 1 0) (8 1 1 1 0)))); (6 (13 (12 (8 1 1 1 1 0) (8 1 1 1 1 0)) (5 (8 1 0) (8 1 0)))); (6 (13 (12 (8 1 1 0) (8 1 1 0)) (11 (8 1 1 1 1 1 0) (8 1 1 1 1 1 1 0)))); # MATH introduce the OR logical operator (7 14); (14 (5 (8 1 1 1 1 1 0) (8 1 1 1 1 1 0)) (12 (8 1 1 1 1 1 1 0) (8 1 1 1 0))); (14 (11 (8 1 0) (8 1 1 0)) (12 (8 1 1 0) (8 0))); (14 (12 (8 1 1 1 1 0) (8 1 0)) (11 (8 1 1 0) (8 1 1 1 1 0))); (14 (11 (8 1 0) (8 1 1 1 1 0)) (12 (8 1 0) (8 0))); (14 (11 (8 1 1 1 1 0) (8 1 1 1 1 1 0)) (5 (8 0) (8 0))); (14 (12 (8 1 1 1 1 1 0) (8 1 1 0)) (5 (8 1 1 1 1 1 0) (8 1 1 1 1 1 0))); (14 (12 (8 1 1 1 1 1 0) (8 1 1 0)) (12 (8 1 1 1 1 1 1 0) (8 1 1 1 1 1 0))); (14 (11 (8 1 1 1 1 1 0) (8 1 1 1 1 1 1 1 1 0)) (11 (8 1 1 1 1 1 0) (8 1 1 1 1 1 1 1 1 0))); (14 (5 (8 0) (8 0)) (5 (8 1 1 0) (8 1 1 0))); (14 (11 (8 0) (8 1 1 1 0)) (5 (8 0) (8 0))); (14 (11 (8 0) (8 1 1 0)) (5 (8 1 1 1 1 0) (8 1 1 0))); (14 (12 (8 1 1 1 0) (8 1 0)) (5 (8 0) (8 1 1 0))); (14 (5 (8 1 1 1 1 1 0) (8 1 1 1 1 1 0)) (5 (8 1 0) (8 1 1 1 1 1 0))); (14 (11 (8 1 1 0) (8 1 1 1 1 0)) (11 (8 1 1 1 1 1 1 0) (8 1 1 1 1 1 0))); (14 (12 (8 1 1 1 1 1 0) (8 1 1 1 0)) (12 (8 1 1 0) (8 1 1 1 1 0))); (14 (12 (8 0) (8 1 1 1 1 0)) (5 (8 0) (8 0))); (14 (5 (8 1 1 0) (8 0)) (11 (8 0) (8 1 1 0))); (14 (11 (8 1 1 1 1 1 1 0) (8 1 1 0)) (11 (8 1 1 1 1 1 0) (8 1 1 1 1 1 1 1 0))); (14 (5 (8 1 1 0) (8 0)) (5 (8 0) (8 0))); (14 (12 (8 1 1 1 1 1 0) (8 1 1 1 1 1 1 0)) (11 (8 1 0) (8 1 1 0))); (6 (14 (12 (8 1 0) (8 1 1 1 1 1 1 0)) (12 (8 1 1 1 1 0) (8 1 1 1 1 0)))); (6 (14 (12 (8 1 1 0) (8 1 1 1 1 1 1 0)) (12 (8 1 1 0) (8 1 1 1 1 1 0)))); (6 (14 (12 (8 1 1 1 0) (8 1 1 1 1 0)) (5 (8 1 0) (8 0)))); (6 (14 (12 (8 1 1 1 0) (8 1 1 1 0)) (11 (8 1 1 1 1 1 0) (8 1 1 1 0)))); (6 (14 (5 (8 1 1 1 1 1 0) (8 1 1 1 1 0)) (12 (8 0) (8 0)))); (6 (14 (12 (8 0) (8 1 0)) (11 (8 1 1 1 1 1 0) (8 1 1 0)))); (6 (14 (12 (8 1 0) (8 1 1 1 1 1 1 0)) (11 (8 1 1 0) (8 0)))); (14 (12 (8 0) (8 1 1 1 0)) (12 (8 1 1 1 1 0) (8 1 1 1 0))); (14 (11 (8 1 1 1 1 0) (8 0)) (11 (8 1 1 1 1 1 0) (8 1 1 1 1 1 1 1 1 0))); (14 (5 (8 1 1 1 0) (8 1 1 1 0)) (5 (8 1 1 0) (8 1 1 0))); (6 (14 (11 (8 1 1 1 1 1 0) (8 1 1 1 0)) (11 (8 1 1 0) (8 1 0)))); (14 (12 (8 1 1 1 1 0) (8 1 0)) (12 (8 1 0) (8 1 1 1 1 1 1 0))); (14 (11 (8 1 1 1 1 0) (8 1 1 1 0)) (5 (8 1 1 1 1 0) (8 1 1 1 1 0))); (6 (14 (12 (8 0) (8 0)) (5 (8 1 1 0) (8 1 1 1 0)))); (14 (12 (8 1 1 1 1 1 0) (8 1 1 0)) (11 (8 1 1 1 0) (8 1 0))); # MATH use equality for truth values (5 (12 (8 1 1 1 1 0) (8 1 1 0)) (12 (8 1 1 1 1 1 0) (8 1 1 1 1 0))); (5 (5 (8 1 1 0) (8 1 1 0)) (11 (8 1 1 1 1 0) (8 1 1 1 1 1 1 1 0))); (5 (12 (8 1 1 1 1 1 1 0) (8 1 1 1 1 1 0)) (12 (8 1 1 1 0) (8 1 0))); (5 (12 (8 1 1 1 1 1 0) (8 1 1 1 1 0)) (11 (8 1 1 1 1 1 0) (8 1 1 1 1 1 1 0))); (5 (5 (8 1 1 0) (8 1 1 0)) (11 (8 1 1 1 1 0) (8 1 1 1 1 1 1 0))); (5 (5 (8 1 1 1 0) (8 1 1 0)) (5 (8 1 0) (8 0))); (5 (12 (8 0) (8 1 0)) (11 (8 1 1 1 1 0) (8 1 0))); (5 (12 (8 1 0) (8 1 1 1 1 1 0)) (12 (8 1 1 1 0) (8 1 1 1 0))); (5 (12 (8 1 1 0) (8 1 1 1 1 1 0)) (11 (8 1 0) (8 0))); (5 (5 (8 1 1 1 0) (8 1 1 1 1 0)) (5 (8 0) (8 1 1 1 1 0))); (6 (5 (5 (8 1 0) (8 0)) (11 (8 1 1 1 1 1 0) (8 1 1 1 1 1 1 0)))); (6 (5 (5 (8 1 1 1 1 1 0) (8 1 1 0)) (5 (8 0) (8 0)))); (6 (5 (11 (8 1 1 1 1 1 0) (8 1 1 0)) (5 (8 1 1 1 1 1 0) (8 1 1 1 1 1 0)))); (6 (5 (5 (8 0) (8 1 0)) (12 (8 1 1 1 1 1 0) (8 1 1 1 1 0)))); (6 (5 (12 (8 1 0) (8 1 1 1 1 0)) (11 (8 1 1 1 0) (8 1 1 1 1 0)))); (6 (5 (12 (8 1 1 1 1 1 1 0) (8 1 1 1 0)) (5 (8 1 1 1 1 0) (8 1 0)))); (6 (5 (11 (8 1 1 1 1 0) (8 1 1 1 1 1 1 0)) (12 (8 1 1 1 0) (8 1 1 1 1 0)))); (6 (5 (11 (8 0) (8 1 1 0)) (5 (8 1 1 1 1 1 0) (8 1 1 1 1 0)))); (6 (5 (12 (8 1 1 1 1 1 1 0) (8 1 1 1 1 0)) (11 (8 1 1 0) (8 0)))); (6 (5 (11 (8 1 1 1 1 0) (8 1 1 1 1 1 0)) (5 (8 1 1 1 0) (8 0)))); (7 16); (7 15); (5 (16) (5 (8 1 1 1 0) (8 1 1 1 0))); (5 (16) (5 (8 0) (8 0))); (5 (16) (12 (8 1 1 1 1 1 0) (8 1 1 0))); (5 (16) (11 (8 1 1 1 0) (8 1 1 1 1 0))); (5 (16) (12 (8 1 1 1 1 1 1 1 1 0) (8 1 1 1 1 1 0))); (5 (11 (8 1 0) (8 1 1 1 1 0)) (16)); (5 (11 (8 1 1 1 0) (8 1 1 1 1 0)) (16)); (5 (5 (8 1 1 1 0) (8 1 1 1 0)) (16)); (5 (11 (8 1 1 1 0) (8 1 1 1 1 0)) (16)); (5 (5 (8 1 1 1 1 0) (8 1 1 1 1 0)) (16)); (5 (15) (12 (8 1 1 0) (8 1 1 1 1 1 1 0))); (5 (15) (5 (8 1 1 0) (8 1 1 1 1 0))); (5 (15) (11 (8 1 1 0) (8 0))); (5 (15) (12 (8 1 1 1 0) (8 1 1 1 1 1 1 0))); (5 (15) (11 (8 1 1 1 1 0) (8 1 1 1 0))); (5 (12 (8 1 1 0) (8 1 1 1 1 1 0)) (15)); (5 (5 (8 1 1 0) (8 1 0)) (15)); (5 (5 (8 1 1 0) (8 1 1 1 1 1 0)) (15)); (5 (11 (8 1 1 1 1 1 1 0) (8 1 1 0)) (15)); (5 (11 (8 1 1 1 0) (8 1 0)) (15)); (5 (16) (16)); (5 (15) (15)); (6 (5 (16) (15))); (6 (5 (15) (16))); # MATH introduce addition (7 1); (5 (1 (8 1 1 1 0) (8 1 1 1 1 0)) (8 1 1 1 1 1 1 1 0)); (5 (1 (8 0) (8 1 1 1 0)) (8 1 1 1 0)); (5 (1 (8 0) (8 1 1 1 0)) (8 1 1 1 0)); (5 (1 (8 1 0) (8 0)) (8 1 0)); (5 (1 (8 0) (8 0)) (8 0)); (5 (1 (8 1 0) (8 1 1 1 0)) (8 1 1 1 1 0)); (5 (1 (8 1 0) (8 0)) (8 1 0)); (5 (1 (8 1 0) (8 0)) (8 1 0)); (5 (1 (8 1 1 0) (8 1 1 1 0)) (8 1 1 1 1 1 0)); (5 (1 (8 0) (8 0)) (8 0)); # MATH introduce subtraction (7 3); (5 (3 (8 1 1 1 1 1 1 0) (8 1 1 1 0)) (8 1 1 1 0)); (5 (3 (8 1 1 1 1 1 1 1 0) (8 1 1 1 0)) (8 1 1 1 1 0)); (5 (3 (8 1 1 1 1 1 1 1 0) (8 1 1 1 1 0)) (8 1 1 1 0)); (5 (3 (8 1 1 1 1 1 0) (8 1 1 0)) (8 1 1 1 0)); (5 (3 (8 1 0) (8 1 0)) (8 0)); (5 (3 (8 0) (8 0)) (8 0)); (5 (3 (8 1 1 0) (8 0)) (8 1 1 0)); (5 (3 (8 1 1 1 1 1 1 1 0) (8 1 1 1 0)) (8 1 1 1 1 0)); (5 (3 (8 1 1 1 1 0) (8 1 1 1 1 0)) (8 0)); (5 (3 (8 1 1 1 0) (8 0)) (8 1 1 1 0)); # MATH introduce multiplication (7 2); (5 (2 (8 0) (8 0)) (8 0)); (5 (2 (8 0) (8 1 0)) (8 0)); (5 (2 (8 0) (8 1 1 0)) (8 0)); (5 (2 (8 0) (8 1 1 1 0)) (8 0)); (5 (2 (8 1 0) (8 0)) (8 0)); (5 (2 (8 1 0) (8 1 0)) (8 1 0)); (5 (2 (8 1 0) (8 1 1 0)) (8 1 1 0)); (5 (2 (8 1 0) (8 1 1 1 0)) (8 1 1 1 0)); (5 (2 (8 1 1 0) (8 0)) (8 0)); (5 (2 (8 1 1 0) (8 1 0)) (8 1 1 0)); (5 (2 (8 1 1 0) (8 1 1 0)) (8 1 1 1 1 0)); (5 (2 (8 1 1 0) (8 1 1 1 0)) (8 1 1 1 1 1 1 0)); (5 (2 (8 1 1 1 0) (8 0)) (8 0)); (5 (2 (8 1 1 1 0) (8 1 0)) (8 1 1 1 0)); (5 (2 (8 1 1 1 0) (8 1 1 0)) (8 1 1 1 1 1 1 0)); (5 (2 (8 1 1 1 0) (8 1 1 1 0)) (8 1 1 1 1 1 1 1 1 1 0)); (5 (2 (8 1 1 1 0) (8 0)) (8 0)); (5 (2 (8 0) (8 1 0)) (8 0)); (5 (2 (8 0) (8 1 0)) (8 0)); (5 (2 (8 0) (8 1 0)) (8 0)); (5 (2 (8 0) (8 1 1 0)) (8 0)); (5 (2 (8 1 1 1 0) (8 1 0)) (8 1 1 1 0)); (5 (2 (8 1 1 1 0) (8 1 1 1 0)) (8 1 1 1 1 1 1 1 1 1 0)); (5 (2 (8 1 0) (8 1 1 0)) (8 1 1 0)); (5 (2 (8 0) (8 1 0)) (8 0)); (5 (2 (8 0) (8 1 1 1 0)) (8 0)); # MATH 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. (5 (8 0) (.)); (5 (8 1 0) (:)); (5 (8 1 1 0) (:.)); (5 (8 1 1 1 0) (::)); (5 (8 1 1 1 1 0) (:..)); (5 (8 1 1 1 1 1 0) (:.:)); (5 (8 1 1 1 1 1 1 0) (::.)); (5 (8 1 1 1 1 1 1 1 0) (:::)); (5 (8 1 1 1 1 1 1 1 1 0) (:...)); (5 (8 1 1 1 1 1 1 1 1 1 0) (:..:)); (5 (8 1 1 1 1 1 1 1 1 1 1 0) (:.:.)); (5 (8 1 1 1 1 1 1 1 1 1 1 1 0) (:.::)); (5 (8 1 1 1 1 1 1 1 1 1 1 1 1 0) (::..)); (5 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 0) (::.:)); (5 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0) (:::.)); (5 (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0) (::::)); (5 (::.:) (8 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (5 (::) (8 1 1 1 0)); (5 (::.:) (8 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (5 (:.:) (8 1 1 1 1 1 0)); (5 (:..:) (8 1 1 1 1 1 1 1 1 1 0)); (5 (::.:) (8 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (5 (:.:) (8 1 1 1 1 1 0)); (5 (::::) (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (5 (:..:) (8 1 1 1 1 1 1 1 1 1 0)); (5 (::.) (8 1 1 1 1 1 1 0)); (5 (:::) (8 1 1 1 1 1 1 1 0)); (5 (:..) (8 1 1 1 1 0)); (5 (::.:) (8 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (5 (:::) (8 1 1 1 1 1 1 1 0)); (5 (:::.) (8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)); (5 (:.:) (8 1 1 1 1 1 0)); (5 (1 (:.) (:.:)) (:::)); (5 (1 (::.) (::.)) (::..)); (5 (1 (::..) (::)) (::::)); (5 (1 (:.) (::)) (:.:)); (5 (1 (:...) (:...)) (:....)); (5 (1 (::.:) (:::.)) (::.::)); (5 (1 (:::) (:.:.)) (:...:)); (5 (1 (::..) (:.::)) (:.:::)); (5 (2 (::.:) (:..:)) (:::.:.:)); (5 (2 (::..) (::.:)) (:..:::..)); (5 (2 (::..) (:.:.)) (::::...)); (5 (2 (::..) (::::)) (:.::.:..)); (5 (2 (:) (::.)) (::.)); (5 (2 (::.) (:.:.)) (::::..)); (5 (2 (:..) (:::.)) (:::...)); (5 (2 (::::) (:..:)) (:....:::)); # MATH demonstrate idea of leaving gaps in an expression # and then filling them in afterwards # the examples given leave a lot to be desired! ((0 33 (5 (1 2 (33)) 13)) 11); ((0 33 (5 (1 11 (33)) 21)) 10); ((0 33 (5 (1 9 (33)) 11)) 2); ((0 33 (5 (1 12 (33)) 18)) 6); ((0 33 (5 (1 6 (33)) 20)) 14); ((0 33 (5 (1 8 (33)) 10)) 2); ((0 33 (5 (1 11 (33)) 18)) 7); ((0 33 (5 (1 8 (33)) 13)) 5); (((0 33 (0 34 (5 (2 (33) (34)) 12))) 6) 2); (((0 33 (0 34 (5 (2 (33) (34)) 84))) 12) 7); (((0 33 (0 34 (5 (2 (33) (34)) 45))) 15) 3); (((0 33 (0 34 (5 (2 (33) (34)) 18))) 3) 6); (((0 33 (0 34 (5 (2 (33) (34)) 90))) 15) 6); (((0 33 (0 34 (5 (2 (33) (34)) 36))) 3) 12); (((0 33 (0 34 (5 (2 (33) (34)) 30))) 2) 15); (((0 33 (0 34 (5 (2 (33) (34)) 32))) 8) 4); ((((0 35 (0 33 (0 34 (5 (2 (33) (34)) (35))))) 11) 1) 11); ((((0 35 (0 33 (0 34 (5 (2 (33) (34)) (35))))) 121) 11) 11); ((((0 35 (0 33 (0 34 (5 (2 (33) (34)) (35))))) 156) 12) 13); ((((0 35 (0 33 (0 34 (5 (2 (33) (34)) (35))))) 16) 2) 8); ((((0 35 (0 33 (0 34 (5 (2 (33) (34)) (35))))) 0) 4) 0); ((((0 35 (0 33 (0 34 (5 (2 (33) (34)) (35))))) 108) 12) 9); ((((0 35 (0 33 (0 34 (5 (2 (33) (34)) (35))))) 80) 10) 8); ((((0 35 (0 33 (0 34 (5 (2 (33) (34)) (35))))) 8) 8) 1); # MATH show some simple function calls # and show a way to remember functions across statements (5 ((0 36 (36 1)) (0 33 (2 (33) (33)))) 1); (5 ((0 36 (36 2)) (0 33 (2 (33) (33)))) 4); (5 ((0 36 (36 0)) (0 33 (2 (33) (33)))) 0); (5 ((0 36 (36 8)) (0 33 (2 (33) (33)))) 64); (5 ((0 36 (36 5)) (0 33 (2 (33) (33)))) 25); (5 ((0 36 (36 1)) (0 33 (2 (33) (33)))) 1); (5 ((0 36 (36 8)) (0 33 (2 (33) (33)))) 64); (5 ((0 36 (36 3)) (0 33 (2 (33) (33)))) 9); (17 36 (0 33 (2 (33) (33)))); (5 (36 0) 0); (5 (36 7) 49); (5 (36 5) 25); (5 (36 6) 36); (17 37 (0 33 (1 (33) 1))); (5 (37 7) 8); (5 (37 3) 4); (5 (37 6) 7); (5 (37 9) 10); # MATH show mechanisms for branching (7 18); (5 (18 (16) 8 4) 8); (5 (18 (16) 0 0) 0); (5 (18 (16) 2 7) 2); (5 (18 (16) 9 7) 9); (5 (18 (16) 0 3) 0); (5 (18 (16) 0 4) 0); (5 (18 (16) 4 9) 4); (5 (18 (15) 7 9) 9); (5 (18 (15) 0 8) 8); (5 (18 (15) 6 3) 3); (5 (18 (15) 2 8) 8); (5 (18 (15) 0 3) 3); (5 (18 (16) 8 0) 8); (5 (18 (15) 2 1) 1); (5 (18 (16) 4 7) 4); (5 (18 (15) 2 6) 6); # MATH 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 (17 38 (0 33 (0 34 (0 35 (33 (34) (35)))))); (17 39 (0 34 (0 35 (34)))); (17 40 (0 34 (0 35 (35)))); (17 41 (0 33 (0 34 (0 35 (38 (35) (33) (34)))))); (17 42 (0 33 (33 (39)))); (17 43 (0 33 (33 (40)))); (17 44 (0 45 (0 33 (33)))); (17 46 (0 45 (0 33 (45 (33))))); (17 47 (0 45 (0 33 (45 (45 (33)))))); (17 48 (0 49 (0 45 (0 33 (45 ((49 (45)) (33))))))); (17 50 (0 51 (0 52 ((51 (48)) (52))))); (17 53 (0 51 (0 52 ((51 (50 (52))) (44))))); (17 54 (0 49 (43 ((49 (0 55 (41 (48 (42 (55))) (42 (55))))) (41 (44) (44)))))); (17 56 (0 49 ((49 (0 57 (40)) (39))))); (17 58 (0 45 ((0 33 (45 (33 (33)))) (0 33 (45 (33 (33))))))); # .. but for rest of message will assume that define does fixed-point for us # now build a link between numbers and church number functions (17 59 (0 60 (60 (0 33 (1 (33) 1)) 0))); (5 0 (59 (44))); (5 1 (59 (46))); (5 2 (59 (47))); (17 61 (0 33 (18 (5 0 (33)) (44) (48 (61 (3 (33) 1)))))); # MATH show an example of recursive evaluation # skipping over a lot of definitions and desugarings (17 62 (0 45 (0 33 (18 (12 (33) 0) (2 (33) (45 (45) (3 (33) 1))) 1)))); (17 63 (0 33 (18 (12 (33) 0) (2 (33) (63 (3 (33) 1))) 1))); (5 (62 (62) 0) 1); (5 (62 (62) 1) 1); (5 (62 (62) 2) 2); (5 (62 (62) 3) 6); (5 (62 (62) 4) 24); (5 (62 (62) 5) 120); (5 (63 0) 1); (5 (63 1) 1); (5 (63 2) 2); (5 (63 3) 6); (5 (63 4) 24); (5 (63 5) 120); # MATH introduce universal quantifier # really need to link with sets for true correctness # and the examples here are REALLY sparse, need much more (7 19); (11 5 (1 5 1)); (11 4 (1 4 1)); (11 3 (1 3 1)); (11 2 (1 2 1)); (11 1 (1 1 1)); (11 0 (1 0 1)); (19 (0 33 (11 (33) (1 (33) 1)))); (11 5 (2 5 2)); (11 4 (2 4 2)); (11 3 (2 3 2)); (11 2 (2 2 2)); (11 1 (2 1 2)); (6 (11 0 (2 0 2))); (6 (19 (0 33 (11 (33) (2 (33) 2))))); # MATH introduce existential quantifier # really need to link with sets for true correctness # and the examples here are REALLY sparse, need much more (6 (5 5 (2 2 2))); (5 4 (2 2 2)); (6 (5 3 (2 2 2))); (6 (5 2 (2 2 2))); (6 (5 1 (2 2 2))); (6 (5 0 (2 2 2))); (7 20); (20 (0 33 (5 (33) (2 2 2)))); (6 (5 5 (1 5 2))); (6 (5 4 (1 4 2))); (6 (5 3 (1 3 2))); (6 (5 2 (1 2 2))); (6 (5 1 (1 1 2))); (6 (5 0 (1 0 2))); (6 (20 (0 33 (5 (33) (1 (33) 2))))); # MATH introduce logical implication (7 64); (17 64 (0 33 (0 34 (6 (13 (33) (6 (34))))))); (64 (16) (16)); (6 (64 (16) (15))); (64 (15) (16)); (64 (15) (15)); (19 (0 33 (19 (0 34 (64 (64 (33) (34)) (64 (6 (34)) (6 (33)))))))); # MATH illustrate lists and some list operators # to make list describable as a function, need to preceed lists # ... with an argument count # lists will be written as [1 2 1] = (list 3 1 2 1) after this lesson # it would be nice to include such syntactic sugar in the message but that # ... is a fight for another day # finally, 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. # # MISSING - intro to cons, car, cdr # used to be pure-cons pure-car pure-cdr but changed for better interface to scheme # also should introduce number? check function # (17 65 (0 49 (0 66 (18 (12 (49) 1) (0 33 (65 (3 (49) 1) (0 34 (0 35 (66 (1 1 (34)) (21 (33) (35))))))) (0 33 (66 1 (33))))))); (17 67 (0 49 (18 (5 (49) 0) (21 0 0) (65 (49) (0 34 (0 35 (21 (34) (35)))))))); (17 68 (0 69 (18 (5 (22 (69)) 0) (32) (18 (5 (22 (69)) 1) (23 (69)) (22 (23 (69))))))); (17 70 (0 69 (18 (5 (22 (69)) 0) (32) (18 (5 (22 (69)) 1) (21 0 0) (21 (3 (22 (69)) 1) (23 (23 (69)))))))); (17 71 (0 69 (22 (69)))); (17 72 (0 69 (0 49 (18 (5 (72 (69)) 0) (32) (18 (5 (49) 0) (68 (69)) (72 (70 (69)) (3 (49) 1))))))); (17 73 (0 33 (0 69 (18 (5 (71 (69)) 0) (21 1 (33)) (21 (1 (71 (69)) 1) (21 (33) (23 (69)))))))); (17 74 (0 33 (0 34 (18 (5 (71 (33)) (71 (34))) (18 (12 (71 (33)) 0) (13 (5 (68 (33)) (68 (34))) (74 (70 (33)) (70 (34)))) (16)) (15))))); (5 (71 ((67 1) 3)) 1); (5 (71 ((67 8) 9 8 0 4 7 3 6 5)) 8); (5 (71 ((67 5) 8 6 4 2 5)) 5); (5 (71 ((67 9) 5 8 4 3 9 6 1 7 2)) 9); (5 (71 ((67 7) 2 4 9 6 5 0 8)) 7); (5 (68 ((67 8) 12 1 4 13 17 3 10 4)) 12); (74 (70 ((67 8) 12 1 4 13 17 3 10 4)) ((67 7) 1 4 13 17 3 10 4)); (5 (68 ((67 9) 6 13 15 4 12 1 0 5 6)) 6); (74 (70 ((67 9) 6 13 15 4 12 1 0 5 6)) ((67 8) 13 15 4 12 1 0 5 6)); (5 (68 ((67 6) 19 4 12 2 15 12)) 19); (74 (70 ((67 6) 19 4 12 2 15 12)) ((67 5) 4 12 2 15 12)); (5 (68 ((67 10) 3 4 4 2 15 3 17 6 11 3)) 3); (74 (70 ((67 10) 3 4 4 2 15 3 17 6 11 3)) ((67 9) 4 4 2 15 3 17 6 11 3)); (5 (68 ((67 2) 15 2)) 15); (74 (70 ((67 2) 15 2)) ((67 1) 2)); (5 (68 ((67 10) 15 12 17 11 0 12 14 8 17 5)) 15); (74 (70 ((67 10) 15 12 17 11 0 12 14 8 17 5)) ((67 9) 12 17 11 0 12 14 8 17 5)); (5 (68 ((67 5) 11 1 10 7 9)) 11); (74 (70 ((67 5) 11 1 10 7 9)) ((67 4) 1 10 7 9)); (5 (68 ((67 3) 19 10 14)) 19); (74 (70 ((67 3) 19 10 14)) ((67 2) 10 14)); (5 (68 ((67 5) 4 2 7 12 18)) 4); (74 (70 ((67 5) 4 2 7 12 18)) ((67 4) 2 7 12 18)); (5 (68 ((67 5) 13 1 0 5 10)) 13); (74 (70 ((67 5) 13 1 0 5 10)) ((67 4) 1 0 5 10)); (5 (72 ((67 1) 9) 0) 9); (5 (72 ((67 10) 4 4 14 0 14 4 17 7 3 17) 0) 4); (5 (72 ((67 8) 10 13 6 14 3 13 9 18) 0) 10); (5 (72 ((67 4) 3 1 0 2) 2) 0); (5 (72 ((67 5) 13 7 18 13 12) 1) 7); (5 (72 ((67 3) 19 16 9) 2) 9); (5 (72 ((67 5) 12 14 5 14 4) 4) 4); (5 (72 ((67 2) 10 17) 1) 17); (5 (72 ((67 4) 1 12 10 18) 3) 18); (5 (72 ((67 8) 17 7 2 4 19 15 4 9) 0) 17); (74 ((67 0)) ((67 0))); (74 ((67 1) 7) ((67 1) 7)); (74 ((67 2) 1 19) ((67 2) 1 19)); (74 ((67 3) 18 1 18) ((67 3) 18 1 18)); (74 ((67 4) 13 15 10 6) ((67 4) 13 15 10 6)); # this next batch of examples are a bit misleading, should streamline (6 (74 ((67 0)) ((67 1) 0))); (6 (74 ((67 0)) ((67 1) 6))); (6 (74 ((67 1) 9) ((67 2) 6 9))); (6 (74 ((67 1) 9) ((67 2) 9 7))); (6 (74 ((67 2) 1 6) ((67 3) 2 1 6))); (6 (74 ((67 2) 1 6) ((67 3) 1 6 0))); (6 (74 ((67 3) 10 9 12) ((67 4) 5 10 9 12))); (6 (74 ((67 3) 10 9 12) ((67 4) 10 9 12 3))); (6 (74 ((67 4) 17 9 1 0) ((67 5) 4 17 9 1 0))); (6 (74 ((67 4) 17 9 1 0) ((67 5) 17 9 1 0 4))); # some helpful functions (74 (73 12 ((67 0))) ((67 1) 12)); (74 (73 0 ((67 1) 14)) ((67 2) 0 14)); (74 (73 10 ((67 2) 8 19)) ((67 3) 10 8 19)); (74 (73 12 ((67 3) 10 2 1)) ((67 4) 12 10 2 1)); (74 (73 14 ((67 4) 6 16 14 5)) ((67 5) 14 6 16 14 5)); (74 (73 4 ((67 5) 15 2 3 11 8)) ((67 6) 4 15 2 3 11 8)); (74 (73 12 ((67 6) 9 2 19 7 2 0)) ((67 7) 12 9 2 19 7 2 0)); (74 (73 11 ((67 7) 17 17 2 4 16 5 14)) ((67 8) 11 17 17 2 4 16 5 14)); (17 75 (0 33 (0 34 ((67 2) (33) (34))))); (17 76 (0 69 (68 (69)))); (17 77 (0 69 (68 (70 (69))))); (74 (75 3 6) ((67 2) 3 6)); (5 (76 (75 3 6)) 3); (5 (77 (75 3 6)) 6); (74 (75 8 8) ((67 2) 8 8)); (5 (76 (75 8 8)) 8); (5 (77 (75 8 8)) 8); (74 (75 9 2) ((67 2) 9 2)); (5 (76 (75 9 2)) 9); (5 (77 (75 9 2)) 2); (17 78 (0 69 (0 79 (0 80 (0 81 (18 (5 (71 (69)) 0) (80 0) (18 (5 (68 (69)) (79)) (81) (78 (70 (69)) (79) (80) (1 (81) 1))))))))); (17 82 (0 69 (0 79 (0 80 (78 (69) (79) (80) 0))))); (17 83 (0 33 100)); (5 (82 ((67 1) 15) 15 (83)) 0); (5 (82 ((67 2) 9 6) 9 (83)) 0); (5 (82 ((67 4) 19 7 14 6) 19 (83)) 0); (5 (82 ((67 8) 10 0 6 9 5 10 2 2) 5 (83)) 4); (5 (82 ((67 4) 14 5 7 6) 6 (83)) 3); (5 (82 ((67 1) 2) 2 (83)) 0); (5 (82 ((67 7) 19 7 12 4 18 8 7) 4 (83)) 3); (5 (82 ((67 1) 2) 2 (83)) 0); (5 (82 ((67 4) 5 19 13 13) 19 (83)) 1); (5 (82 ((67 10) 17 14 17 8 6 1 2 12 10 4) 1 (83)) 5); (5 (82 ((67 4) 15 13 6 17) 14 (83)) 100); (5 (82 ((67 6) 16 13 10 3 0 19) 2 (83)) 100); (5 (82 ((67 8) 13 19 4 17 11 9 2 3) 15 (83)) 100); # HACK describe changes to the implicit interpreter to allow new special forms (17 84 (25)); (17 25 (0 33 (18 (5 (33) 10) 15 (84 (33))))); (5 10 15); (5 (1 10 15) 30); (17 25 (84)); (6 (5 10 15)); (5 (1 10 15) 25); # now can create a special form for lists (17 25 (0 33 (18 (24 (33)) (84 (33)) (18 (5 (68 (33)) 85) (25 (73 ((67 2) 67 (71 (70 (33)))) (70 (33)))) (84 (33)))))); (5 (85 1 2 3) ((67 3) 1 2 3)); # now to desugar let expressions (17 86 (25)); (17 87 (0 33 (0 88 (18 (5 (71 (33)) 0) (25 (88)) (87 (70 (33)) (85 (85 0 (68 (68 (33))) (88)) (68 (70 (68 (33)))))))))); (17 25 (0 33 (18 (24 (33)) (86 (33)) (18 (5 (68 (33)) 89) (87 (68 (70 (33))) (68 (70 (70 (33))))) (86 (33)))))); (89 ((33 20)) (5 (33) 20)); (89 ((33 50) (34 20)) (5 (3 (33) (34)) 30)); # the is-list function is now on dubious ground # this stuff will be replaced with typing ASAP (17 90 (0 33 (6 (24 (33))))); (90 ((67 2) 1 3)); (90 ((67 0))); (6 (90 23)); (90 ((67 3) ((67 2) 2 3) 1 (0 33 (1 (33) 10)))); # MATH introduce sugar for let # if would be good to introduce desugarings more rigorously, but for now... # ... just a very vague sketch (7 89); (5 (89 ((33 10)) (1 (33) 5)) ((0 33 (1 (33) 5)) 10)); (5 (89 ((33 10) (34 5)) (1 (33) (34))) (((0 33 (0 34 (1 (33) (34)))) 10) 5)); # MATH build up functions of several variables (5 ((0 33 (0 34 (3 (33) (34)))) 12 6) 6); (5 ((0 33 (0 34 (3 (33) (34)))) 3 0) 3); (5 ((0 33 (0 34 (3 (33) (34)))) 8 7) 1); (5 ((0 33 (0 34 (3 (33) (34)))) 7 6) 1); (5 ((0 33 (0 34 (3 (33) (34)))) 7 6) 1); (17 91 (0 33 (72 (33) (3 (71 (33)) 1)))); (17 92 (0 33 (18 (12 (71 (33)) 1) (73 (68 (33)) (92 (70 (33)))) (85)))); # test last and except-last (5 15 (91 (85 4 5 15))); (74 (85 4 5) (92 (85 4 5 15))); (7 26); (17 93 (25)); (17 25 (89 ((94 (93))) (0 33 (18 (24 (33)) (94 (33)) (18 (5 (68 (33)) 26) (89 ((95 (68 (70 (33)))) (88 (68 (70 (70 (33)))))) (18 (12 (71 (95)) 0) (25 (85 26 (92 (95)) (85 0 (91 (95)) (88)))) (25 (88)))) (94 (33))))))); # test lambda (5 (0 33 (3 (33) 5)) (26 (33) (3 (33) 5))); (5 (0 33 (0 34 (3 (33) (34)))) (26 (33 34) (3 (33) (34)))); (5 ((26 (33 34) (3 (33) (34))) 17 9) 8); (5 ((26 (33 34) (3 (33) (34))) 9 2) 7); (5 ((26 (33 34) (3 (33) (34))) 13 8) 5); (5 ((26 (33 34) (3 (33) (34))) 8 6) 2); (5 ((26 (33 34) (3 (33) (34))) 3 3) 0); (17 96 (26 (33 34) (18 (74 (34) (85)) (33) (96 ((33) (68 (34))) (70 (34)))))); (5 (96 (26 (33 34) (3 (33) (34))) (85 12 6)) 6); (5 (96 (26 (33 34) (3 (33) (34))) (85 10 7)) 3); (5 (96 (26 (33 34) (3 (33) (34))) (85 12 3)) 9); (5 (96 (26 (33 34) (3 (33) (34))) (85 6 5)) 1); (5 (96 (26 (33 34) (3 (33) (34))) (85 0 0)) 0); # MATH show map function for applying a function across the elements of a list (17 97 (26 (55 69) (18 (12 (71 (69)) 0) (73 (55 (68 (69))) (97 (55) (70 (69)))) (85)))); (5 (97 (0 33 (2 (33) 2)) (85 3 18 17)) (85 6 36 34)); (5 (97 (0 33 (2 (33) 2)) (85 6 11 7 9)) (85 12 22 14 18)); (5 (97 (0 33 (2 (33) 2)) (85 6 14 16 1 11)) (85 12 28 32 2 22)); (5 (97 (0 33 (2 (33) 2)) (85 13 11 19 9 7 16)) (85 26 22 38 18 14 32)); (5 (97 (0 33 42) (85 15 3 19)) (85 42 42 42)); (5 (97 (0 33 42) (85 2 15 6 19)) (85 42 42 42 42)); (5 (97 (0 33 42) (85 2 9 11 5 13)) (85 42 42 42 42 42)); (5 (97 (0 33 42) (85 19 12 17 18 5 8)) (85 42 42 42 42 42 42)); (17 98 (26 (55 69) (18 (10 (71 (69)) 2) (55 (68 (69)) (98 (55) (70 (69)))) (18 (5 (71 (69)) 1) (68 (69)) (32))))); (5 (98 (1) (85 17 7 18)) 42); (5 (98 (1) (85 19 10 0 11)) 40); (5 (98 (1) (85 7 16 11 8 19)) 61); (5 (98 (1) (85 1 5 14 16 15 19)) 70); # MATH introduce mutable objects, and side-effects (7 27); (7 28); (7 29); (17 99 (27 0)); (28 (99) 15); (5 (29 (99)) 15); (28 (99) 5); (28 (99) 7); (5 (29 (99)) 7); (17 100 (27 11)); (5 (29 (100)) 11); (28 (100) 22); (5 (29 (100)) 22); (5 (29 (99)) 7); (5 (1 (29 (99)) (29 (100))) 29); (18 (5 (29 (99)) 7) (28 (99) 88) (28 (99) 99)); (5 (29 (99)) 88); (18 (5 (29 (99)) 7) (28 (99) 88) (28 (99) 99)); (5 (29 (99)) 99); # MATH show how to execute a sequence of instructions (7 101); (17 93 (25)); (17 102 (0 33 (18 (10 (71 (33)) 1) (73 (91 (33)) (102 (92 (33)))) (33)))); # test reverse (74 (85 1 2 3) (102 (85 3 2 1))); (17 25 (89 ((94 (93))) (0 33 (18 (24 (33)) (94 (33)) (18 (5 (68 (33)) 101) (25 (85 (85 0 33 (85 68 (85 33))) (73 85 (102 (70 (33)))))) (94 (33))))))); (5 (101 1 7 2 4) 4); (5 (101 (28 (99) 88) (28 (99) 6) (29 (99))) 6); (5 (101 (28 (100) 88) (28 (99) 6) (29 (100))) 88); (5 (101 (28 (99) 88) (28 (99) 6) (29 (99)) 4) 4); # MATH 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) (17 103 (26 (104 33 34 35) (18 (5 (35) (33)) (34) (104 (35))))); (17 105 (26 (104 33) (104 (33)))); (17 106 (0 33 (32))); (17 107 (103 (103 (106) 3 2) 4 9)); (5 (105 (107) 4) 9); (5 (105 (107) 3) 2); (5 (105 (107) 8) (32)); (5 (105 (107) 15) (32)); (5 (105 (103 (107) 15 33) 15) 33); (5 (105 (107) 15) (32)); (17 108 (0 33 (18 (74 (33) (85)) (106) (103 (108 (70 (33))) (76 (68 (33))) (77 (68 (33))))))); (5 (105 (108 (85 (75 3 10) (75 2 20) (75 1 30))) 3) 10); (5 (105 (108 (85 (75 3 10) (75 2 20) (75 1 30))) 1) 30); # OBJECT introduce simple mutable structures (17 109 (0 69 (89 ((110 (97 (0 33 (27 0)) (69)))) (0 79 (72 (110) (82 (69) (79) (0 33 0))))))); (17 111 (109 (85 112 113 114))); (28 (111 112) 15); (5 (29 (111 112)) 15); # OBJECT introduce method handler wrappers (17 115 (26 (116 117 118) (103 (116) (117) (0 57 (118 (116)))))); (17 119 (0 33 (33 0))); (17 120 (109 (85 33 34))); (28 (120 33) 10); (28 (120 34) 20); (5 (29 (120 33)) 10); (5 (29 (120 34)) 20); (17 121 (115 (120) 122 (0 123 (1 (29 (123 33)) (29 (123 34)))))); (5 (29 (121 33)) 10); (5 (29 (121 34)) 20); (5 (119 (121 122)) 30); (28 (121 34) 10); (5 (119 (121 122)) 20); (28 (120 34) 5); (5 (119 (121 122)) 15); # TURING introduce turing machine model # just for fun! (17 124 (0 33 (18 (12 (71 (33)) 0) (18 (12 (71 (33)) 1) (70 (33)) (85 (15))) (0 85 (15))))); (17 125 (0 33 (18 (12 (71 (33)) 0) (68 (33)) (15)))); (17 126 (0 127 (89 ((33 (77 (127)))) (18 (12 (71 (33)) 0) (68 (33)) (15))))); (17 128 (26 (127 129 130) (18 (5 (129) 1) (75 (73 (130) (76 (127))) (124 (77 (127)))) (18 (5 (129) 0) (75 (124 (76 (127))) (73 (125 (76 (127))) (73 (130) (124 (77 (127)))))) (75 (76 (127)) (73 (130) (124 (77 (127))))))))); (17 131 (26 (132 133 91 127) (18 (5 (133) (91)) (127) (89 ((134 (132 (133) (126 (127))))) (131 (132) (72 (134) 0) (91) (128 (127) (72 (134) 1) (72 (134) 2))))))); (17 135 (0 33 (75 (85) (33)))); (17 136 (0 33 (0 69 (18 (12 (71 (69)) 0) (18 (5 (91 (69)) (33)) (136 (33) (92 (69))) (69)) (69))))); (17 137 (0 33 (136 (15) (77 (33))))); (17 138 (108 (85 (75 139 (108 (85 (75 0 (85 139 1 0)) (75 1 (85 139 1 1)) (75 (15) (85 140 0 (15)))))) (75 140 (108 (85 (75 0 (85 141 0 1)) (75 1 (85 140 0 0)) (75 (15) (85 142 2 1))))) (75 141 (108 (85 (75 0 (85 141 0 0)) (75 1 (85 141 0 1)) (75 (15) (85 142 1 (15)))))) (75 142 (108 (85)))))); (5 (137 (131 (138) 139 142 (135 (85 1 0 0 1)))) (85 1 0 1 0)); (5 (137 (131 (138) 139 142 (135 (85 1 1 1)))) (85 1 0 0 0)); (5 (137 (131 (138) 139 142 (135 (85 1 1 1 0 0 0 1 1 1)))) (85 1 1 1 0 0 1 0 0 0)); # MATH introduce sets and set membership (7 143); (17 143 (0 33 (0 69 (6 (5 (82 (69) (33) (0 34 (15))) (15)))))); (143 9 (85 7 9 5 6)); (143 6 (85 7 9 5 6)); (143 7 (85 7 9 5 6)); (143 9 (85 7 1 9 2 4)); (143 1 (85 7 1 9 2 4)); (143 9 (85 7 1 9 2 4)); (143 2 (85 7 8 0 9 2 6)); (143 9 (85 7 8 0 9 2 6)); (143 0 (85 7 8 0 9 2 6)); (143 1 (85 9 1 3 6)); (143 1 (85 9 1 3 6)); (143 1 (85 9 1 3 6)); (143 4 (85 8 1 2 3 4)); (143 8 (85 8 1 2 3 4)); (143 1 (85 8 1 2 3 4)); (6 (143 0 (85 8 2 3 5))); (6 (143 8 (85 0 1 3 5))); (6 (143 0 (85 8 3 4))); (6 (143 7 (85 8 4 5 6))); (6 (143 7 (85 0 9 2 3))); # rules for set equality (17 144 (0 33 (0 34 (18 (12 (71 (33)) 0) (13 (143 (68 (33)) (34)) (144 (70 (33)) (34))) (16))))); (17 145 (0 33 (0 34 (13 (144 (33) (34)) (144 (34) (33)))))); (145 (85 1 5 9) (85 5 1 9)); (145 (85 1 5 9) (85 9 1 5)); (6 (145 (85 1 5 9) (85 1 5))); # 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 (143 5 (30 (0 33 (5 (1 (33) 10) 15)))); (143 3 (30 (0 33 (5 (2 (33) 3) (1 (33) 6))))); (17 146 (85)); (143 0 (31)); (19 (0 33 (64 (143 (33) (31)) (143 (1 (33) 1) (31))))); (143 1 (31)); (143 2 (31)); (143 3 (31)); (143 4 (31)); (143 5 (31)); (143 6 (31)); (143 7 (31)); (143 8 (31)); (143 9 (31)); (6 (143 (16) (31))); (6 (143 (15) (31))); (17 147 (85 (16) (15))); (143 (16) (147)); (143 (15) (147)); (6 (143 0 (147))); (17 148 (30 (0 33 (20 (0 34 (13 (143 (34) (31)) (5 (2 2 (34)) (33)))))))); (143 0 (31)); (143 0 (148)); (143 1 (31)); (6 (143 1 (148))); (143 2 (31)); (143 2 (148)); (143 3 (31)); (6 (143 3 (148))); (143 4 (31)); (143 4 (148)); (143 5 (31)); (6 (143 5 (148))); (143 6 (31)); (143 6 (148)); # MATH introduce graph structures (17 149 (26 (150 151) (75 (150) (151)))); (17 152 (149 (85 1 2 3 4) (85 (85 1 2) (85 2 3) (85 1 4)))); (17 153 (26 (154 155 156) (20 (0 81 (18 (13 (10 (81) 0) (11 (81) (71 (72 (154) 1)))) (74 (72 (72 (154) 1) (81)) (85 (155) (156))) (15)))))); (5 (153 (152) 1 2) (16)); (5 (153 (152) 1 3) (15)); (5 (153 (152) 2 4) (15)); # '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'. (17 157 (26 (154 155 156) (18 (5 (155) (156)) (16) (18 (153 (154) (155) (156)) (16) (20 (0 158 (18 (153 (154) (155) (158)) (157 (154) (158) (156)) (15)))))))); (5 (157 (152) 1 2) (16)); (5 (157 (152) 1 3) (16)); (5 (157 (152) 2 4) (15)); # OBJECT 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. (17 159 (26 (160) (26 (33) (18 (5 (33) 161) (160) 0)))); (17 162 (0 33 (18 (24 (33)) (159 (33)) (33)))); (17 163 (26 (164 165) (18 (24 (165)) (5 (164) 161) (6 (24 ((162 (165)) (164))))))); # add version of lambda that allows types to be declared (17 93 (25)); (17 25 (89 ((94 (93))) (0 33 (18 (24 (33)) (94 (33)) (18 (5 (68 (33)) 26) (89 ((95 (68 (70 (33)))) (88 (68 (70 (70 (33)))))) (18 (12 (71 (95)) 0) (18 (24 (91 (95))) (25 (85 26 (92 (95)) (85 0 (91 (95)) (88)))) (89 ((166 (76 (91 (95)))) (167 (77 (91 (95))))) (25 (85 26 (92 (95)) (85 0 (166) (85 89 (85 (85 (166) (85 (85 162 (85 (166))) (167)))) (88))))))) (25 (88)))) (94 (33))))))); # add conditional form (17 93 (25)); (17 25 (89 ((94 (93))) (0 33 (18 (24 (33)) (94 (33)) (18 (5 (68 (33)) 168) (89 ((169 (68 (70 (33)))) (170 (70 (70 (33))))) (18 (12 (71 (170)) 0) (25 (85 18 (76 (169)) (77 (169)) (73 168 (170)))) (25 (169)))) (94 (33))))))); (5 99 (168 99)); (5 8 (168 ((16) 8) 11)); (5 11 (168 ((15) 8) 11)); (5 7 (168 ((15) 3) ((16) 7) 11)); (5 3 (168 ((16) 3) ((16) 7) 11)); (5 11 (168 ((15) 3) ((15) 7) 11)); (17 171 (26 (172 69) (18 (12 (71 (69)) 0) (18 (172 (68 (69))) (171 (172) (70 (69))) (73 (68 (69)) (171 (172) (70 (69))))) (69)))); (17 173 (26 (33) (171 (26 (34) (5 (34) (33)))))); (74 (85 1 2 3 5) (173 4 (85 1 2 3 4 5))); (74 (85 1 2 3 5) (173 4 (85 1 4 2 4 3 4 5))); (17 174 (26 (164 165) (89 ((175 (162 (165)))) (175 (164))))); (17 176 (26 ((33 161) (34 161)) (174 161 (1 (33) (34))))); (5 42 (176 (159 10) (159 32))); (5 42 (176 10 32)); (17 177 (26 (45) ((26 (33) (45 (26 (34) ((33 (33)) (34))))) (26 (33) (45 (26 (34) ((33 (33)) (34)))))))); # OBJECT an example object -- a 2D point (17 178 (26 (33 34) (177 (26 (123 179) (168 ((5 (179) 33) (33)) ((5 (179) 34) (34)) ((5 (179) 178) (123)) ((5 (179) 1) (26 ((55 178)) (178 (1 (33) (55 33)) (1 (34) (55 34))))) ((5 (179) 5) (26 ((55 178)) (13 (5 (33) (55 33)) (5 (34) (55 34))))) 0))))); (17 180 (178 1 11)); (17 181 (178 2 22)); (5 1 (180 33)); (5 22 (181 34)); (5 11 ((178 11 12) 33)); (5 11 (((178 11 12) 178) 33)); (5 16 (((178 16 17) 178) 33)); (5 33 (180 1 (181) 34)); (180 1 (181) 5 (178 3 33)); (181 1 (180) 5 (178 3 33)); ((178 100 200) 1 (178 200 100) 5 (178 300 300)); (163 178 (180)); (6 (163 161 (180))); (163 161 5); (6 (163 178 5)); # OBJECT an example object -- a container (17 182 (26 (33) (89 ((183 (27 (85)))) (177 (26 (123 179) (168 ((5 (179) 182) (123)) ((5 (179) 184) (29 (183))) ((5 (179) 50) (26 (33) (18 (6 (143 (33) (29 (183)))) (28 (183) (73 (33) (29 (183)))) (15)))) ((5 (179) 185) (26 (33) (28 (183) (173 (33) (29 (183)))))) ((5 (179) 5) (26 ((60 182)) (145 (123 184) (60 184)))) 0)))))); # 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 (17 186 (182 187)); (186 50 77); (186 50 88); (186 50 99); (145 (186 184) (85 77 88 99)); (186 185 88); (145 (186 184) (85 77 99)); (17 188 (182 187)); (188 50 77); (188 50 99); (188 5 (186)); # OBJECT expressing inheritance # counter-container adds one method to container: count (17 189 (26 (33) (89 ((190 (182 187))) (177 (26 (123 179) (168 ((5 (179) 189) (123)) ((5 (179) 191) (71 (190 184))) (190 (179)))))))); (17 192 (189 187)); (5 0 (192 191)); (192 50 4); (5 1 (192 191)); (192 50 5); (5 2 (192 191)); # OBJECT adding a special form for classes # need a bunch of extra machinery first, will push this # back into previous sections eventually, and simplify (17 193 (26 (194 195) (18 (12 (71 (194)) 0) (193 (92 (194)) (73 (91 (194)) (195))) (195)))); (5 (193 (85 1 2 3) (85 4 5 6)) (85 1 2 3 4 5 6)); (17 196 (0 33 (0 69 (18 (12 (71 (69)) 0) (73 (68 (69)) (196 (33) (70 (69)))) (85 (33)))))); (5 (196 5 (85 1 2)) (85 1 2 5)); (17 197 (26 (172 69) (18 (12 (71 (69)) 0) (18 (172 (68 (69))) (73 (68 (69)) (197 (172) (70 (69)))) (197 (172) (70 (69)))) (69)))); (17 198 (89 ((199 (27 0))) (26 (33) (89 ((200 (29 (199)))) (101 (28 (199) (1 (200) 1)) (200)))))); (5 (198 187) 0); (5 (198 187) 1); (5 (198 187) 2); (6 (5 (198 187) (198 187))); # 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. (17 93 (25)); (17 25 (89 ((94 (93))) (0 33 (18 (24 (33)) (94 (33)) (18 (5 (68 (33)) 201) (89 ((117 (72 (33) 1)) (202 (72 (33) 2)) (203 (70 (70 (70 (33)))))) (25 (85 17 (117) (85 26 (73 118 (202)) (85 89 (196 (85 204 (85 198 187)) (97 (70) (197 (0 33 (5 (76 (33)) 205)) (203)))) (85 89 (85 (85 123 (85 177 (85 26 (85 123 118) (193 (73 168 (193 (97 (0 33 (85 (85 5 (85 118) (76 (33))) (77 (33)))) (97 (70) (197 (0 33 (5 (76 (33)) 118)) (203)))) (97 (0 33 (85 (85 5 (85 118) (33)) (85 (33)))) (97 (77) (197 (0 33 (5 (76 (33)) 205)) (203)))))) (85 (85 (85 5 (85 118) 123) (85 123)) (85 (85 5 (85 118) (117)) (85 123 123)) (85 (85 5 (85 118) 206) (85 26 (85 33) 0)) (85 (85 5 (85 118) 187) 0) (85 (85 5 (85 118) 204) (85 204)) (85 (85 5 (85 118) 207) (85 26 (85 33) (85 5 (85 204) (85 33 204)))) (85 123 206 (85 118)))))))) (85 101 (85 123 (85 118)) (85 123)))))))) (94 (33))))))); # revisit the point class example (201 178 (33 34) (118 33 (33)) (118 34 (34)) (118 1 (26 ((55 178)) (178 187 (1 (33) (55 33)) (1 (34) (55 34))))) (118 5 (26 ((55 178)) (13 (5 (33) (55 33)) (5 (34) (55 34)))))); # note the appearance of new in the next line -- # this is the only difference to previous version (17 180 (178 187 1 11)); (17 181 (178 187 2 22)); (5 1 (180 33)); (5 22 (181 34)); (5 11 ((178 187 11 12) 33)); (5 11 (((178 187 11 12) 178) 33)); (5 16 (((178 187 16 17) 178) 33)); (5 33 (180 1 (181) 34)); (180 1 (181) 5 (178 187 3 33)); (181 1 (180) 5 (178 187 3 33)); ((178 187 100 200) 1 (178 187 200 100) 5 (178 187 300 300)); (163 178 (180)); (6 (163 161 (180))); # OBJECT wrapper class for cells (201 208 (209) (205 210 (27 (209))) (118 211 (29 (210))) (118 212 (26 (213) (28 (210) (213)))) (118 214 (123 212 (209))) (118 206 (26 (33) ((162 (123 211)) (33))))); (17 215 (208 187 15)); (5 15 (215 211)); (215 212 82); (5 82 (215 211)); (17 216 (208 187 (178 187 120 150))); (17 217 (208 187 (178 187 300 300))); (216 1 (217) 5 (178 187 420 450)); (6 (216 5 (217))); (217 212 (216)); (216 5 (217)); # MUD playing around with doors and rooms (201 218 ((219 220) (221 220)) (118 187 (101 (219 50 (123)) (221 50 (123)))) (118 222 (26 ((133 220)) (168 ((133 207 (219)) (221)) ((133 207 (221)) (219)) 0))) (118 223 (26 ((133 220)) (168 ((133 207 (219)) (16)) ((133 207 (221)) (16)) (15))))); (201 220 () (205 210 (182 187)) (118 206 (26 (33) (210 (33))))); # need to fix up containers to use object equality (17 224 (26 (49 69) (12 (71 (197 (26 (33) (33 207 (49))) (69))) 0))); (201 182 () (205 183 (208 187 (85))) (118 184 (183 211)) (118 50 (26 (33) (18 (6 (224 (33) (183 211))) (183 212 (73 (33) (183 211))) (15))))); (17 225 (220 187)); (17 226 (220 187)); (17 227 (218 187 (225) (226))); ((76 (225 184)) 207 (227)); ((76 (226 184)) 207 (227)); (227 222 (225) 207 (226)); (6 (227 222 (225) 207 (225))); (227 222 (226) 207 (225)); (17 228 (220 187)); (17 229 (220 187)); (17 230 (220 187)); (17 231 (220 187)); (17 232 (218 187 (225) (228))); (17 233 (218 187 (225) (229))); (17 234 (218 187 (229) (230))); (201 235 () (205 236 (208 187 (231))) (118 237 (26 ((238 220)) (236 212 (238)))) (118 239 (236 211)) (118 240 0)); (17 241 (26 (172 242 81 49 69) (18 (12 (71 (69)) 0) (18 (12 (172 (68 (69))) (242)) (241 (172) (172 (68 (69))) (49) (1 (49) 1) (70 (69))) (241 (172) (242) (81) (1 (49) 1) (70 (69)))) (81)))); (17 243 (26 (172 69) (241 (172) (172 (68 (69))) 0 0 (69)))); (17 244 (26 (172 242 81 49 69) (18 (12 (71 (69)) 0) (18 (11 (172 (68 (69))) (242)) (244 (172) (172 (68 (69))) (49) (1 (49) 1) (70 (69))) (244 (172) (242) (81) (1 (49) 1) (70 (69)))) (81)))); (17 245 (26 (172 69) (244 (172) (172 (68 (69))) 0 0 (69)))); (5 2 (243 (26 (33) (33)) (85 3 4 5 0))); (5 1 (243 (26 (33) (33)) (85 3 5 4 0))); (5 0 (243 (26 (33) (33)) (85 5 3 4 0))); # the robo class makes a character that patrols from room to room (201 246 () (205 190 (235 187)) (205 247 (208 187 0)) (205 248 (208 187 (26 (33) 0))) (118 206 (26 (33) (190 (33)))) (118 240 (89 ((249 (197 (26 (33) (163 218 (33))) (123 236 184)))) (89 ((250 (97 (26 (33) (248 211 (33))) (249)))) (89 ((251 (72 (249) (245 (26 (33) (33)) (250)))) (252 (248 211)) (253 (247 211))) (101 (123 236 212 (251 222 (123 236 211))) (248 212 (26 ((254 218)) (18 (254 207 (251)) (253) (252 (254))))) (247 212 (1 (247 211) 1)))))))); (17 255 (246 187)); (255 237 (229)); (17 256 (26 ((257 246)) (243 (26 ((238 220)) (18 (238 207 (257 239)) 1 0)) (85 (225) (226) (229) (228) (230))))); (17 258 (26 (49 133 69) (18 (11 (133) (49)) (101 (255 240) (258 (49) (1 (133) 1) (196 (256 (255)) (69)))) (69)))); # here is a list of the first 30 rooms the robot character visits # 0=hall, 1=kitchen, 2=stairs, 3=lawn, 4=bedroom (74 (258 30 0 (85)) (85 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)); # 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