Skip to content

Commit 67c0e9f

Browse files
committed
Add the cond special form to the compiler
( LAMBDA NIL ( COND ( ( EQ ( QUOTE 123 ) ( QUOTE 233 ) ) ( QUOTE 77 ) ) ( ( EQ ( QUOTE 123 ) ( QUOTE 344 ) ) ( QUOTE 89 ) ) ( ( QUOTE T ) ( QUOTE 4000 ) ) ) )
1 parent 127eb38 commit 67c0e9f

File tree

2 files changed

+82
-0
lines changed

2 files changed

+82
-0
lines changed

compiler2.lisp

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
( LETREC COMPILE
2+
( COMPILE LAMBDA ( E )
3+
( COMP E ( QUOTE NIL ) ( QUOTE ( 4 21 ) ) ) )
4+
( COMP LAMBDA ( E N C )
5+
( IF ( ATOM E )
6+
( CONS ( QUOTE 1 ) ( CONS ( LOCATION E N ) C ) )
7+
( IF ( EQ ( CAR E ) ( QUOTE QUOTE ) )
8+
( CONS ( QUOTE 2 ) ( CONS ( CAR ( CDR E ) ) C ) )
9+
( IF ( EQ ( CAR E ) ( QUOTE ADD ) )
10+
( COMP ( CAR ( CDR E ) ) N ( COMP ( CAR ( CDR ( CDR E ) ) ) N ( CONS ( QUOTE 15 ) C ) ) )
11+
( IF ( EQ ( CAR E ) ( QUOTE SUB ) )
12+
( COMP ( CAR ( CDR E ) ) N ( COMP ( CAR ( CDR ( CDR E ) ) ) N ( CONS ( QUOTE 16 ) C ) ) )
13+
( IF ( EQ ( CAR E ) ( QUOTE MUL ) )
14+
( COMP ( CAR ( CDR E ) ) N ( COMP ( CAR ( CDR ( CDR E ) ) ) N ( CONS ( QUOTE 17 ) C ) ) )
15+
( IF ( EQ ( CAR E ) ( QUOTE DIV ) )
16+
( COMP ( CAR ( CDR E ) ) N ( COMP ( CAR ( CDR ( CDR E ) ) ) N ( CONS ( QUOTE 18 ) C ) ) )
17+
( IF ( EQ ( CAR E ) ( QUOTE REM ) )
18+
( COMP ( CAR ( CDR E ) ) N ( COMP ( CAR ( CDR ( CDR E ) ) ) N ( CONS ( QUOTE 19 ) C ) ) )
19+
( IF ( EQ ( CAR E ) ( QUOTE LEQ ) )
20+
( COMP ( CAR ( CDR E ) ) N ( COMP ( CAR ( CDR ( CDR E ) ) ) N ( CONS ( QUOTE 20 ) C ) ) )
21+
( IF ( EQ ( CAR E ) ( QUOTE EQ ) )
22+
( COMP ( CAR ( CDR E ) ) N ( COMP ( CAR ( CDR ( CDR E ) ) ) N ( CONS ( QUOTE 14 ) C ) ) )
23+
( IF ( EQ ( CAR E ) ( QUOTE CAR ) )
24+
( COMP ( CAR ( CDR E ) ) N ( CONS ( QUOTE 10 ) C ) )
25+
( IF ( EQ ( CAR E ) ( QUOTE CDR ) )
26+
( COMP ( CAR ( CDR E ) ) N ( CONS ( QUOTE 11 ) C ) )
27+
( IF ( EQ ( CAR E ) ( QUOTE ATOM ) )
28+
( COMP ( CAR ( CDR E ) ) N ( CONS ( QUOTE 12 ) C ) )
29+
( IF ( EQ ( CAR E ) ( QUOTE CONS ) )
30+
( COMP ( CAR ( CDR ( CDR E ) ) ) N ( COMP ( CAR ( CDR E ) ) N ( CONS ( QUOTE 13 ) C ) ) )
31+
( IF ( EQ ( CAR E ) ( QUOTE IF ) )
32+
( LET ( COMP ( CAR ( CDR E ) ) N ( CONS ( QUOTE 8 )
33+
( CONS THENPT ( CONS ELSEPT C ) ) ) )
34+
( THENPT COMP ( CAR ( CDR ( CDR E ) ) ) N ( QUOTE ( 9 ) ) )
35+
( ELSEPT COMP ( CAR ( CDR ( CDR ( CDR E ) ) ) ) N ( QUOTE ( 9 ) ) ) )
36+
(IF ( EQ ( CAR E ) ( QUOTE COND ) )
37+
( COMPCOND ( CDR E ) N C )
38+
( IF ( EQ ( CAR E ) ( QUOTE LAMBDA ) )
39+
( LET ( CONS ( QUOTE 3 ) ( CONS BODY C ) )
40+
( BODY COMP ( CAR ( CDR ( CDR E ) ) ) ( CONS ( CAR ( CDR E ) ) N )
41+
( QUOTE ( 5 ) ) ) )
42+
( IF ( EQ ( CAR E ) ( QUOTE LET ) )
43+
( LET ( LET ( COMPLIS ARGS N ( CONS ( QUOTE 3 )
44+
( CONS BODY ( CONS ( QUOTE 4 ) C ) ) ) )
45+
( BODY COMP ( CAR ( CDR E ) ) M ( QUOTE ( 5 ) ) ) )
46+
( M CONS ( VARS ( CDR ( CDR E ) ) ) N )
47+
( ARGS EXPRS ( CDR ( CDR E ) ) ) )
48+
( IF ( EQ ( CAR E ) ( QUOTE LETREC ) )
49+
( LET ( LET ( CONS ( QUOTE 6 ) ( COMPLIS ARGS M
50+
( CONS ( QUOTE 3 ) ( CONS BODY ( CONS ( QUOTE 7 ) C ) ) ) ) )
51+
( BODY COMP ( CAR ( CDR E ) ) M ( QUOTE ( 5 ) ) ) )
52+
( M CONS ( VARS ( CDR ( CDR E ) ) ) N )
53+
( ARGS EXPRS ( CDR ( CDR E ) ) ) )
54+
( COMPLIS ( CDR E ) N ( COMP ( CAR E ) N ( CONS ( QUOTE 4 ) C ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
55+
( COMPLIS LAMBDA ( E N C )
56+
( IF ( EQ E ( QUOTE NIL ) ) ( CONS ( QUOTE 2 ) ( CONS ( QUOTE NIL ) C ) )
57+
( COMPLIS ( CDR E ) N ( COMP ( CAR E ) N ( CONS ( QUOTE 13 ) C ) ) ) ) )
58+
( LOCATION LAMBDA ( E N )
59+
( LETREC
60+
( IF ( MEMBER E ( CAR N ) ) ( CONS ( QUOTE 0 ) ( POSN E ( CAR N ) ) )
61+
( INCAR ( LOCATION E ( CDR N ) ) ) )
62+
( MEMBER LAMBDA ( E N )
63+
( IF ( EQ N ( QUOTE NIL ) ) ( QUOTE F )
64+
( IF ( EQ E ( CAR N ) ) ( QUOTE T ) ( MEMBER E ( CDR N ) ) ) ) )
65+
( POSN LAMBDA ( E N )
66+
( IF ( EQ E ( CAR N ) ) ( QUOTE 0 ) ( ADD ( QUOTE 1 ) ( POSN E ( CDR N ) ) ) ) )
67+
( INCAR LAMBDA ( L ) ( CONS ( ADD ( QUOTE 1 ) ( CAR L ) ) ( CDR L ) ) ) ) )
68+
( VARS LAMBDA ( D )
69+
( IF ( EQ D ( QUOTE NIL ) ) ( QUOTE NIL )
70+
( CONS ( CAR ( CAR D ) ) ( VARS ( CDR D ) ) ) ) )
71+
( EXPRS LAMBDA ( D )
72+
( IF ( EQ D ( QUOTE NIL ) ) ( QUOTE NIL )
73+
( CONS ( CDR ( CAR D ) ) ( EXPRS ( CDR D ) ) ) ) )
74+
( COMPCOND LAMBDA ( E N C )
75+
( IF ( EQ E ( QUOTE NIL ) )
76+
( CONS ( QUOTE 2 ) ( CONS ( QUOTE NIL ) C ) )
77+
( LET ( COMP ( CAR ( CAR E ) ) N ( CONS ( QUOTE 8 )
78+
( CONS THENPT ( CONS ELSEPT C ) ) ) )
79+
( THENPT COMP ( CAR ( CDR ( CAR E ) ) ) N ( QUOTE ( 9 ) ) )
80+
( ELSEPT COMPCOND ( CDR E ) N ( QUOTE ( 9 ) ) ) ) ) )
81+
)

compiler2.secd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
( 6 2 NIL 3 ( 1 ( 0 . 0 ) 2 NIL 14 8 ( 1 ( 0 . 2 ) 2 NIL 13 2 2 13 9 ) ( 2 NIL 2 NIL 2 ( 9 ) 13 1 ( 0 . 1 ) 13 1 ( 0 . 0 ) 11 13 1 ( 1 . 6 ) 4 13 2 NIL 2 ( 9 ) 13 1 ( 0 . 1 ) 13 1 ( 0 . 0 ) 10 11 10 13 1 ( 1 . 1 ) 4 13 3 ( 2 NIL 1 ( 1 . 2 ) 1 ( 0 . 1 ) 13 1 ( 0 . 0 ) 13 2 8 13 13 1 ( 1 . 1 ) 13 1 ( 1 . 0 ) 10 10 13 1 ( 2 . 1 ) 4 5 ) 4 9 ) 5 ) 13 3 ( 1 ( 0 . 0 ) 2 NIL 14 8 ( 2 NIL 9 ) ( 2 NIL 1 ( 0 . 0 ) 11 13 1 ( 1 . 5 ) 4 1 ( 0 . 0 ) 10 11 13 9 ) 5 ) 13 3 ( 1 ( 0 . 0 ) 2 NIL 14 8 ( 2 NIL 9 ) ( 2 NIL 1 ( 0 . 0 ) 11 13 1 ( 1 . 4 ) 4 1 ( 0 . 0 ) 10 10 13 9 ) 5 ) 13 3 ( 6 2 NIL 3 ( 1 ( 0 . 0 ) 11 2 1 1 ( 0 . 0 ) 10 15 13 5 ) 13 3 ( 1 ( 0 . 0 ) 1 ( 0 . 1 ) 10 14 8 ( 2 0 9 ) ( 2 1 2 NIL 1 ( 0 . 1 ) 11 13 1 ( 0 . 0 ) 13 1 ( 1 . 1 ) 4 15 9 ) 5 ) 13 3 ( 1 ( 0 . 1 ) 2 NIL 14 8 ( 2 F 9 ) ( 1 ( 0 . 0 ) 1 ( 0 . 1 ) 10 14 8 ( 2 T 9 ) ( 2 NIL 1 ( 0 . 1 ) 11 13 1 ( 0 . 0 ) 13 1 ( 1 . 0 ) 4 9 ) 9 ) 5 ) 13 3 ( 2 NIL 1 ( 1 . 1 ) 10 13 1 ( 1 . 0 ) 13 1 ( 0 . 0 ) 4 8 ( 2 NIL 1 ( 1 . 1 ) 10 13 1 ( 1 . 0 ) 13 1 ( 0 . 1 ) 4 2 0 13 9 ) ( 2 NIL 2 NIL 1 ( 1 . 1 ) 11 13 1 ( 1 . 0 ) 13 1 ( 2 . 3 ) 4 13 1 ( 0 . 2 ) 4 9 ) 5 ) 7 5 ) 13 3 ( 1 ( 0 . 0 ) 2 NIL 14 8 ( 1 ( 0 . 2 ) 2 NIL 13 2 2 13 9 ) ( 2 NIL 2 NIL 1 ( 0 . 2 ) 2 13 13 13 1 ( 0 . 1 ) 13 1 ( 0 . 0 ) 10 13 1 ( 1 . 1 ) 4 13 1 ( 0 . 1 ) 13 1 ( 0 . 0 ) 11 13 1 ( 1 . 2 ) 4 9 ) 5 ) 13 3 ( 1 ( 0 . 0 ) 12 8 ( 1 ( 0 . 2 ) 2 NIL 1 ( 0 . 1 ) 13 1 ( 0 . 0 ) 13 1 ( 1 . 3 ) 4 13 2 1 13 9 ) ( 1 ( 0 . 0 ) 10 2 QUOTE 14 8 ( 1 ( 0 . 2 ) 1 ( 0 . 0 ) 11 10 13 2 2 13 9 ) ( 1 ( 0 . 0 ) 10 2 ADD 14 8 ( 2 NIL 2 NIL 1 ( 0 . 2 ) 2 15 13 13 1 ( 0 . 1 ) 13 1 ( 0 . 0 ) 11 11 10 13 1 ( 1 . 1 ) 4 13 1 ( 0 . 1 ) 13 1 ( 0 . 0 ) 11 10 13 1 ( 1 . 1 ) 4 9 ) ( 1 ( 0 . 0 ) 10 2 SUB 14 8 ( 2 NIL 2 NIL 1 ( 0 . 2 ) 2 16 13 13 1 ( 0 . 1 ) 13 1 ( 0 . 0 ) 11 11 10 13 1 ( 1 . 1 ) 4 13 1 ( 0 . 1 ) 13 1 ( 0 . 0 ) 11 10 13 1 ( 1 . 1 ) 4 9 ) ( 1 ( 0 . 0 ) 10 2 MUL 14 8 ( 2 NIL 2 NIL 1 ( 0 . 2 ) 2 17 13 13 1 ( 0 . 1 ) 13 1 ( 0 . 0 ) 11 11 10 13 1 ( 1 . 1 ) 4 13 1 ( 0 . 1 ) 13 1 ( 0 . 0 ) 11 10 13 1 ( 1 . 1 ) 4 9 ) ( 1 ( 0 . 0 ) 10 2 DIV 14 8 ( 2 NIL 2 NIL 1 ( 0 . 2 ) 2 18 13 13 1 ( 0 . 1 ) 13 1 ( 0 . 0 ) 11 11 10 13 1 ( 1 . 1 ) 4 13 1 ( 0 . 1 ) 13 1 ( 0 . 0 ) 11 10 13 1 ( 1 . 1 ) 4 9 ) ( 1 ( 0 . 0 ) 10 2 REM 14 8 ( 2 NIL 2 NIL 1 ( 0 . 2 ) 2 19 13 13 1 ( 0 . 1 ) 13 1 ( 0 . 0 ) 11 11 10 13 1 ( 1 . 1 ) 4 13 1 ( 0 . 1 ) 13 1 ( 0 . 0 ) 11 10 13 1 ( 1 . 1 ) 4 9 ) ( 1 ( 0 . 0 ) 10 2 LEQ 14 8 ( 2 NIL 2 NIL 1 ( 0 . 2 ) 2 20 13 13 1 ( 0 . 1 ) 13 1 ( 0 . 0 ) 11 11 10 13 1 ( 1 . 1 ) 4 13 1 ( 0 . 1 ) 13 1 ( 0 . 0 ) 11 10 13 1 ( 1 . 1 ) 4 9 ) ( 1 ( 0 . 0 ) 10 2 EQ 14 8 ( 2 NIL 2 NIL 1 ( 0 . 2 ) 2 14 13 13 1 ( 0 . 1 ) 13 1 ( 0 . 0 ) 11 11 10 13 1 ( 1 . 1 ) 4 13 1 ( 0 . 1 ) 13 1 ( 0 . 0 ) 11 10 13 1 ( 1 . 1 ) 4 9 ) ( 1 ( 0 . 0 ) 10 2 CAR 14 8 ( 2 NIL 1 ( 0 . 2 ) 2 10 13 13 1 ( 0 . 1 ) 13 1 ( 0 . 0 ) 11 10 13 1 ( 1 . 1 ) 4 9 ) ( 1 ( 0 . 0 ) 10 2 CDR 14 8 ( 2 NIL 1 ( 0 . 2 ) 2 11 13 13 1 ( 0 . 1 ) 13 1 ( 0 . 0 ) 11 10 13 1 ( 1 . 1 ) 4 9 ) ( 1 ( 0 . 0 ) 10 2 ATOM 14 8 ( 2 NIL 1 ( 0 . 2 ) 2 12 13 13 1 ( 0 . 1 ) 13 1 ( 0 . 0 ) 11 10 13 1 ( 1 . 1 ) 4 9 ) ( 1 ( 0 . 0 ) 10 2 CONS 14 8 ( 2 NIL 2 NIL 1 ( 0 . 2 ) 2 13 13 13 1 ( 0 . 1 ) 13 1 ( 0 . 0 ) 11 10 13 1 ( 1 . 1 ) 4 13 1 ( 0 . 1 ) 13 1 ( 0 . 0 ) 11 11 10 13 1 ( 1 . 1 ) 4 9 ) ( 1 ( 0 . 0 ) 10 2 IF 14 8 ( 2 NIL 2 NIL 2 ( 9 ) 13 1 ( 0 . 1 ) 13 1 ( 0 . 0 ) 11 11 11 10 13 1 ( 1 . 1 ) 4 13 2 NIL 2 ( 9 ) 13 1 ( 0 . 1 ) 13 1 ( 0 . 0 ) 11 11 10 13 1 ( 1 . 1 ) 4 13 3 ( 2 NIL 1 ( 1 . 2 ) 1 ( 0 . 1 ) 13 1 ( 0 . 0 ) 13 2 8 13 13 1 ( 1 . 1 ) 13 1 ( 1 . 0 ) 11 10 13 1 ( 2 . 1 ) 4 5 ) 4 9 ) ( 1 ( 0 . 0 ) 10 2 COND 14 8 ( 2 NIL 1 ( 0 . 2 ) 13 1 ( 0 . 1 ) 13 1 ( 0 . 0 ) 11 13 1 ( 1 . 6 ) 4 9 ) ( 1 ( 0 . 0 ) 10 2 LAMBDA 14 8 ( 2 NIL 2 NIL 2 ( 5 ) 13 1 ( 0 . 1 ) 1 ( 0 . 0 ) 11 10 13 13 1 ( 0 . 0 ) 11 11 10 13 1 ( 1 . 1 ) 4 13 3 ( 1 ( 1 . 2 ) 1 ( 0 . 0 ) 13 2 3 13 5 ) 4 9 ) ( 1 ( 0 . 0 ) 10 2 LET 14 8 ( 2 NIL 2 NIL 1 ( 0 . 0 ) 11 11 13 1 ( 1 . 5 ) 4 13 1 ( 0 . 1 ) 2 NIL 1 ( 0 . 0 ) 11 11 13 1 ( 1 . 4 ) 4 13 13 3 ( 2 NIL 2 NIL 2 ( 5 ) 13 1 ( 0 . 0 ) 13 1 ( 1 . 0 ) 11 10 13 1 ( 2 . 1 ) 4 13 3 ( 2 NIL 1 ( 2 . 2 ) 2 4 13 1 ( 0 . 0 ) 13 2 3 13 13 1 ( 2 . 1 ) 13 1 ( 1 . 1 ) 13 1 ( 3 . 2 ) 4 5 ) 4 5 ) 4 9 ) ( 1 ( 0 . 0 ) 10 2 LETREC 14 8 ( 2 NIL 2 NIL 1 ( 0 . 0 ) 11 11 13 1 ( 1 . 5 ) 4 13 1 ( 0 . 1 ) 2 NIL 1 ( 0 . 0 ) 11 11 13 1 ( 1 . 4 ) 4 13 13 3 ( 2 NIL 2 NIL 2 ( 5 ) 13 1 ( 0 . 0 ) 13 1 ( 1 . 0 ) 11 10 13 1 ( 2 . 1 ) 4 13 3 ( 2 NIL 1 ( 2 . 2 ) 2 7 13 1 ( 0 . 0 ) 13 2 3 13 13 1 ( 1 . 0 ) 13 1 ( 1 . 1 ) 13 1 ( 3 . 2 ) 4 2 6 13 5 ) 4 5 ) 4 9 ) ( 2 NIL 2 NIL 1 ( 0 . 2 ) 2 4 13 13 1 ( 0 . 1 ) 13 1 ( 0 . 0 ) 10 13 1 ( 1 . 1 ) 4 13 1 ( 0 . 1 ) 13 1 ( 0 . 0 ) 11 13 1 ( 1 . 2 ) 4 9 ) 9 ) 9 ) 9 ) 9 ) 9 ) 9 ) 9 ) 9 ) 9 ) 9 ) 9 ) 9 ) 9 ) 9 ) 9 ) 9 ) 9 ) 5 ) 13 3 ( 2 NIL 2 ( 4 21 ) 13 2 NIL 13 1 ( 0 . 0 ) 13 1 ( 1 . 1 ) 4 5 ) 13 3 ( 1 ( 0 . 0 ) 5 ) 7 4 21 )

0 commit comments

Comments
 (0)