Migrate functions

This commit is contained in:
Justin Ethier 2016-09-16 17:35:07 -04:00
parent c1393acf91
commit df7640777f
2 changed files with 99 additions and 195 deletions

View file

@ -48,9 +48,6 @@
azip azip
assq-remove-key assq-remove-key
assq-remove-keys assq-remove-keys
const?
ref?
quote?
let? let?
let->bindings let->bindings
let->exp let->exp
@ -67,24 +64,12 @@
list->lambda-formals list->lambda-formals
list->pair list->pair
lambda->exp lambda->exp
if->condition
if->then
if-else?
if->else
app?
app->fun app->fun
app->args app->args
precompute-prim-app? precompute-prim-app?
begin->exps begin->exps
define?
define-lambda? define-lambda?
define->lambda define->lambda
define->var
define->exp
define-c?
set!?
set!->var
set!->exp
closure? closure?
closure->lam closure->lam
closure->env closure->env
@ -261,24 +246,6 @@
;; Data type predicates and accessors. ;; Data type predicates and accessors.
; const? : exp -> boolean
(define (const? exp)
(or (integer? exp)
(real? exp)
(string? exp)
(vector? exp)
(bytevector? exp)
(char? exp)
(boolean? exp)))
; ref? : exp -> boolean
(define (ref? exp)
(symbol? exp))
; quote? : exp -> boolean
(define (quote? exp)
(tagged-list? 'quote exp))
; let? : exp -> boolean ; let? : exp -> boolean
(define (let? exp) (define (let? exp)
(tagged-list? 'let exp)) (tagged-list? 'let exp))
@ -364,28 +331,6 @@
(define (lambda->exp exp) (define (lambda->exp exp)
(cddr exp)) ;; JAE - changed from caddr, so we can handle multiple expressions (cddr exp)) ;; JAE - changed from caddr, so we can handle multiple expressions
; if->condition : if-exp -> exp
(define (if->condition exp)
(cadr exp))
; if->then : if-exp -> exp
(define (if->then exp)
(caddr exp))
;; if-else? : if-exp -> bool
;; Determines whether an if expression has an else clause
(define (if-else? exp)
(and (tagged-list? 'if exp)
(> (length exp) 3)))
; if->else : if-exp -> exp
(define (if->else exp)
(cadddr exp))
; app? : exp -> boolean
(define (app? exp)
(pair? exp))
; app->fun : app-exp -> exp ; app->fun : app-exp -> exp
(define (app->fun exp) (define (app->fun exp)
(car exp)) (car exp))
@ -462,10 +407,6 @@
(define (begin->exps exp) (define (begin->exps exp)
(cdr exp)) (cdr exp))
; define : exp -> boolean
(define (define? exp)
(tagged-list? 'define exp))
(define (define-lambda? exp) (define (define-lambda? exp)
(let ((var (cadr exp))) (let ((var (cadr exp)))
(or (or
@ -486,33 +427,6 @@
`(define ,var (lambda ,args ,@body)))) `(define ,var (lambda ,args ,@body))))
(else exp))) (else exp)))
; define->var : define-exp -> var
(define (define->var exp)
(cond
((define-lambda? exp)
(caadr exp))
(else
(cadr exp))))
; define->exp : define-exp -> exp
(define (define->exp exp)
(cddr exp))
(define (define-c? exp)
(tagged-list? 'define-c exp))
; set! : exp -> boolean
(define (set!? exp)
(tagged-list? 'set! exp))
; set!->var : set!-exp -> var
(define (set!->var exp)
(cadr exp))
; set!->exp : set!-exp -> exp
(define (set!->exp exp)
(caddr exp))
; closure? : exp -> boolean ; closure? : exp -> boolean
(define (closure? exp) (define (closure? exp)
(tagged-list? 'closure exp)) (tagged-list? 'closure exp))

View file

@ -23,23 +23,21 @@
lambda-formals-type lambda-formals-type
lambda-varargs-var lambda-varargs-var
pack-lambda-arguments pack-lambda-arguments
;; TODO: if->condition
; if->condition if->then
; if->then if-else?
; if-else? if->else
; if->else const?
; const? ref?
; ref? quote?
; quote? define-c?
; define-c? set!?
; set!? set!->var
; set!->var set!->exp
; set!->exp define?
; define? define->var
; define->var define->exp
; define->exp app?
; app?
;; Environments ;; Environments
env:enclosing-environment env:enclosing-environment
env:first-frame env:first-frame
@ -99,104 +97,96 @@
(define (lambda? exp) (define (lambda? exp)
(tagged-list? 'lambda exp)) (tagged-list? 'lambda exp))
; if->condition : if-exp -> exp
(define (if->condition exp)
(cadr exp))
; if->then : if-exp -> exp
(define (if->then exp)
(caddr exp))
;; if-else? : if-exp -> bool
;; Determines whether an if expression has an else clause
(define (if-else? exp)
(and (tagged-list? 'if exp)
(> (length exp) 3)))
; ; if->else : if-exp -> exp
; (define (if->else exp)
;; if->condition : if-exp -> exp (cadddr exp))
;(define (if->condition exp)
; (cadr exp))
;
;; if->then : if-exp -> exp
;(define (if->then exp)
; (caddr exp))
;
;;; if-else? : if-exp -> bool
;;; Determines whether an if expression has an else clause
;(define (if-else? exp)
; (and (tagged-list? 'if exp)
; (> (length exp) 3)))
;
;; if->else : if-exp -> exp
;(define (if->else exp)
; (cadddr exp))
;
;; app? : exp -> boolean
;(define (app? exp)
; (pair? exp))
;
;; const? : exp -> boolean
;(define (const? exp)
; (or (integer? exp)
; (real? exp)
; (string? exp)
; (vector? exp)
; (bytevector? exp)
; (char? exp)
; (boolean? exp)))
;
;; ref? : exp -> boolean
;(define (ref? exp)
; (symbol? exp))
;
;; quote? : exp -> boolean
;(define (quote? exp)
; (tagged-list? 'quote exp))
;
;; set! : exp -> boolean
;(define (set!? exp)
; (tagged-list? 'set! exp))
;
;; set!->var : set!-exp -> var
;(define (set!->var exp)
; (cadr exp))
;
;; set!->exp : set!-exp -> exp
;(define (set!->exp exp)
; (caddr exp))
;
;; define : exp -> boolean
;(define (define? exp)
; (tagged-list? 'define exp))
;
;(define (define-lambda? exp)
; (let ((var (cadr exp)))
; (or
; ;; Standard function
; (and (list? var)
; (> (length var) 0)
; (symbol? (car var)))
; ;; Varargs function
; (and (pair? var)
; (symbol? (car var))))))
;
;(define (define->lambda exp)
; (cond
; ((define-lambda? exp)
; (let ((var (caadr exp))
; (args (cdadr exp))
; (body (cddr exp)))
; `(define ,var (lambda ,args ,@body))))
; (else exp)))
;
;; define->var : define-exp -> var
;(define (define->var exp)
; (cond
; ((define-lambda? exp)
; (caadr exp))
; (else
; (cadr exp))))
;
;; define->exp : define-exp -> exp
;(define (define->exp exp)
; (cddr exp))
;
;(define (define-c? exp)
; (tagged-list? 'define-c exp))
; app? : exp -> boolean
(define (app? exp)
(pair? exp))
; const? : exp -> boolean
(define (const? exp)
(or (integer? exp)
(real? exp)
(string? exp)
(vector? exp)
(bytevector? exp)
(char? exp)
(boolean? exp)))
; ref? : exp -> boolean
(define (ref? exp)
(symbol? exp))
; quote? : exp -> boolean
(define (quote? exp)
(tagged-list? 'quote exp))
; set! : exp -> boolean
(define (set!? exp)
(tagged-list? 'set! exp))
; set!->var : set!-exp -> var
(define (set!->var exp)
(cadr exp))
; set!->exp : set!-exp -> exp
(define (set!->exp exp)
(caddr exp))
; define : exp -> boolean
(define (define? exp)
(tagged-list? 'define exp))
(define (define-lambda? exp)
(let ((var (cadr exp)))
(or
;; Standard function
(and (list? var)
(> (length var) 0)
(symbol? (car var)))
;; Varargs function
(and (pair? var)
(symbol? (car var))))))
(define (define->lambda exp)
(cond
((define-lambda? exp)
(let ((var (caadr exp))
(args (cdadr exp))
(body (cddr exp)))
`(define ,var (lambda ,args ,@body))))
(else exp)))
; define->var : define-exp -> var
(define (define->var exp)
(cond
((define-lambda? exp)
(caadr exp))
(else
(cadr exp))))
; define->exp : define-exp -> exp
(define (define->exp exp)
(cddr exp))
(define (define-c? exp)
(tagged-list? 'define-c exp))
;; Create a proper copy of an improper list ;; Create a proper copy of an improper list
;; EG: (1 2 . 3) ==> (1 2 3) ;; EG: (1 2 . 3) ==> (1 2 3)