diff --git a/scheme/cyclone/transforms.sld b/scheme/cyclone/transforms.sld index 2e241f48..67bf3188 100644 --- a/scheme/cyclone/transforms.sld +++ b/scheme/cyclone/transforms.sld @@ -67,8 +67,6 @@ app->args precompute-prim-app? begin->exps - define-lambda? - define->lambda closure? closure->lam closure->env @@ -411,26 +409,6 @@ (define (begin->exps exp) (cdr 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))) - ; closure? : exp -> boolean (define (closure? exp) (tagged-list? 'closure exp)) diff --git a/scheme/cyclone/util.sld b/scheme/cyclone/util.sld index 897a4bef..d002a3fd 100644 --- a/scheme/cyclone/util.sld +++ b/scheme/cyclone/util.sld @@ -20,6 +20,8 @@ begin? lambda? pair->list + define-lambda? + define->lambda formals->list lambda-formals->list lambda-varargs? @@ -250,6 +252,26 @@ (cons lst '()) (cons (car lst) (loop (cdr lst)))))) +(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))) + ; lambda->formals : lambda-exp -> list[symbol] (define (lambda->formals exp) (cadr exp))