From b58a11e9c511467719d7d994c2764582df12cb7f Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Sun, 14 Aug 2016 18:58:00 -0400 Subject: [PATCH] Staging new functions --- scheme/cyclone/util.sld | 44 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/scheme/cyclone/util.sld b/scheme/cyclone/util.sld index 112d7c0e..a6724186 100644 --- a/scheme/cyclone/util.sld +++ b/scheme/cyclone/util.sld @@ -17,6 +17,11 @@ begin? lambda? pair->list +; lambda-formals->list +; lambda-varargs? +; lambda->formals +; lambda-formals-type +; lambda-varargs-var ;; Environments env:enclosing-environment env:first-frame @@ -75,6 +80,45 @@ (cons lst '()) (cons (car lst) (loop (cdr lst)))))) +;; lambda->formals : lambda-exp -> list[symbol] +;(define (lambda->formals exp) +; (cadr exp)) +; +;(define (lambda-varargs-var exp) +; (if (lambda-varargs? exp) +; (if (equal? (lambda-formals-type exp) 'args:varargs) +; (lambda->formals exp) ; take symbol directly +; (car (reverse (lambda-formals->list exp)))) ; Last arg is varargs +; #f)) +; +;;(define (lambda-varargs? exp) +;; (and (lambda? exp) +;; (or (symbol? (lambda->formals exp)) +;; (and (pair? (lambda->formals exp)) +;; (not (list? (lambda->formals exp))))))) +;; Alternate definition: +;(define (lambda-varargs? exp) +; (let ((type (lambda-formals-type exp))) +; (or (equal? type 'args:varargs) +; (equal? type 'args:fixed-with-varargs)))) +; +;(define (lambda-formals-type exp) +; (let ((args (lambda->formals exp))) +; (cond +; ((symbol? args) 'args:varargs) +; ((list? args) 'args:fixed) +; ((pair? args) 'args:fixed-with-varargs) +; (else +; (error `(Unexpected formals list in lambda-formals-type: ,args)))))) +; +;(define (lambda-formals->list exp) +; (if (lambda-varargs? exp) +; (let ((args (lambda->formals exp))) +; (if (symbol? args) +; (list args) +; (pair->list args))) +; (lambda->formals exp))) + ; char->natural : char -> natural (define (char->natural c) (let ((i (char->integer c)))