Added functions from transforms module

This commit is contained in:
Justin Ethier 2016-08-15 23:08:37 -04:00
parent 773de4d49c
commit 179c90869c

View file

@ -17,11 +17,11 @@
begin? begin?
lambda? lambda?
pair->list pair->list
; lambda-formals->list lambda-formals->list
; lambda-varargs? lambda-varargs?
; lambda->formals lambda->formals
; lambda-formals-type lambda-formals-type
; lambda-varargs-var lambda-varargs-var
;; Environments ;; Environments
env:enclosing-environment env:enclosing-environment
env:first-frame env:first-frame
@ -80,46 +80,44 @@
(cons lst '()) (cons lst '())
(cons (car lst) (loop (cdr lst)))))) (cons (car lst) (loop (cdr lst))))))
;; lambda->formals : lambda-exp -> list[symbol] ; lambda->formals : lambda-exp -> list[symbol]
;(define (lambda->formals exp) (define (lambda->formals exp)
; (cadr exp)) (cadr exp))
;
;(define (lambda-varargs-var exp) (define (lambda-varargs-var exp)
; (if (lambda-varargs? exp) (if (lambda-varargs? exp)
; (if (equal? (lambda-formals-type exp) 'args:varargs) (if (equal? (lambda-formals-type exp) 'args:varargs)
; (lambda->formals exp) ; take symbol directly (lambda->formals exp) ; take symbol directly
; (car (reverse (lambda-formals->list exp)))) ; Last arg is varargs (car (reverse (lambda-formals->list exp)))) ; Last arg is varargs
; #f)) #f))
;
TODO: WTF, which version of lambda-varargs? to use? does it matter? figure this out in transforms.sld first (define (lambda-varargs? exp)
TODO: why the fuck do we get a circular dep error after these functions are removed from transforms? what is going on with that? (and (lambda? exp)
;;(define (lambda-varargs? exp) (or (symbol? (lambda->formals exp))
;; (and (lambda? exp) (and (pair? (lambda->formals exp))
;; (or (symbol? (lambda->formals exp)) (not (list? (lambda->formals exp)))))))
;; (and (pair? (lambda->formals exp)) ; Alternate definition:
;; (not (list? (lambda->formals exp)))))))
;; Alternate definition:
;(define (lambda-varargs? exp) ;(define (lambda-varargs? exp)
; (let ((type (lambda-formals-type exp))) ; (let ((type (lambda-formals-type exp)))
; (or (equal? type 'args:varargs) ; (or (equal? type 'args:varargs)
; (equal? type 'args:fixed-with-varargs)))) ; (equal? type 'args:fixed-with-varargs))))
;
;(define (lambda-formals-type exp) (define (lambda-formals-type exp)
; (let ((args (lambda->formals exp))) (let ((args (lambda->formals exp)))
; (cond (cond
; ((symbol? args) 'args:varargs) ((symbol? args) 'args:varargs)
; ((list? args) 'args:fixed) ((list? args) 'args:fixed)
; ((pair? args) 'args:fixed-with-varargs) ((pair? args) 'args:fixed-with-varargs)
; (else (else
; (error `(Unexpected formals list in lambda-formals-type: ,args)))))) (error `(Unexpected formals list in lambda-formals-type: ,args))))))
;
;(define (lambda-formals->list exp) (define (lambda-formals->list exp)
; (if (lambda-varargs? exp) (if (lambda-varargs? exp)
; (let ((args (lambda->formals exp))) (let ((args (lambda->formals exp)))
; (if (symbol? args) (if (symbol? args)
; (list args) (list args)
; (pair->list args))) (pair->list args)))
; (lambda->formals exp))) (lambda->formals exp)))
; char->natural : char -> natural ; char->natural : char -> natural
(define (char->natural c) (define (char->natural c)