mirror of
https://github.com/justinethier/cyclone.git
synced 2025-07-14 08:17:35 +02:00
Migrate functions
This commit is contained in:
parent
c1393acf91
commit
df7640777f
2 changed files with 99 additions and 195 deletions
|
@ -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))
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Add table
Reference in a new issue