![]() |
pLISP © '98 Thomas Mahler |
(define COMPILE (lambda (E)
(COMP E (quote NIL) (quote (4 21)))))
(define COMP (lambda (E N C)
(if (atomp E)
(cons (quote 1) (cons (LOCATION E N) C))
(if (equal (car E) (quote QUOTE))
(cons (quote 2) (cons (car (cdr E)) C))
(if (equal (car E) (quote ADD))
(COMP (car (cdr E)) N (COMP (car (cdr (cdr E))) N (cons (quote 15) C)))
(if (equal (car E) (quote SUB))
(COMP (car (cdr E)) N (COMP (car (cdr (cdr E))) N (cons (quote 16) C)))
(if (equal (car E) (quote MUL))
(COMP (car (cdr E)) N (COMP (car (cdr (cdr E))) N (cons (quote 17) C)))
(if (equal (car E) (quote DIV))
(COMP (car (cdr E)) N (COMP (car (cdr (cdr E))) N (cons (quote 18) C)))
(if (equal (car E) (quote REM))
(COMP (car (cdr E)) N (COMP (car (cdr (cdr E))) N (cons (quote 19) C)))
(if (equal (car E) (quote LEQ))
(COMP (car (cdr E)) N (COMP (car (cdr (cdr E))) N (cons (quote 20) C)))
(if (equal (car E) (quote EQ))
(COMP (car (cdr E)) N (COMP (car (cdr (cdr E))) N (cons (quote 14) C)))
(if (equal (car E) (quote CAR))
(COMP (car (cdr E)) N (cons (quote 10) C))
(if (equal (car E) (quote CDR))
(COMP (car (cdr E)) N (cons (quote 11) C))
(if (equal (car E) (quote ATOM))
(COMP (car (cdr E)) N (cons (quote 12) C))
(if (equal (car E) (quote CONS))
(COMP (car (cdr (cdr E))) N (COMP (car (cdr E)) N (cons (quote 13) C)))
(if (equal (car E) (quote IF))
(COMP (car (cdr E)) N (cons (quote 8)
(cons (COMP (car (cdr (cdr E))) N (quote (9))) (cons (COMP (car (cdr (cdr (cdr E)))) N (quote (9))) C))))
(if (equal (car E) (quote LAMBDA))
(cons (quote 3) (cons (COMP (car (cdr (cdr E))) (cons (car (cdr E)) N)
(quote (5))) C))
(if (equal (car E) (quote LET))
(COMPLIS (EXPRS (cdr (cdr E))) N (cons (quote 3)
(cons (COMP (car (cdr E)) (cons (VARS (cdr (cdr E))) N) (quote (5))) (cons (quote 4) C))))
(if (equal (car E) (quote LETREC))
(cons (quote 6) (COMPLIS (EXPRS (cdr (cdr E))) (cons (VARS (cdr (cdr E))) N)
(cons (quote 3) (cons (COMP (car (cdr E)) (cons (VARS (cdr (cdr E))) N) (quote (5))) (cons (quote 7) C)))))
(COMPLIS (cdr E) N (COMP (car E) N (cons (quote 4) C))))))))))))))))))))))
(define COMPLIS (lambda (E N C)
(if (equal E (quote NIL)) (cons (quote 2) (cons (quote NIL) C))
(COMPLIS (cdr E) N (COMP (car E) N (cons (quote 13) C))))))
(define LOCATION (lambda (E N)
(if (member E (car N)) (cons 0 (POSN E (car N)))
(INCAR (LOCATION E (cdr N))))))
(define POSN (lambda (E N)
(if (equal E (car N)) 0 (+1 (POSN E (cdr N))))))
(define INCAR (lambda (L) (cons (+1 (car L)) (cdr L))))
(define VARS (lambda (D)
(if (equal D (quote NIL)) (quote NIL)
(cons (car (car D)) (VARS (cdr D))))))
(define EXPRS (lambda (D)
(if (equal D (quote NIL)) (quote NIL)
(cons (cdr (car D)) (EXPRS (cdr D))))))