diff --git a/scheme/cyclone/util.sld b/scheme/cyclone/util.sld index f43cf1df..eb0ceb14 100644 --- a/scheme/cyclone/util.sld +++ b/scheme/cyclone/util.sld @@ -2,6 +2,7 @@ (import (scheme base) (scheme char)) (export + filter tagged-list? mangle mangle-global) diff --git a/transforms.scm b/transforms.scm index be164230..b414daab 100644 --- a/transforms.scm +++ b/transforms.scm @@ -273,19 +273,6 @@ env (assq-remove-keys (assq-remove-key env (car keys)) (cdr keys)))) -;; Simplified version of filter from SRFI 1 -(define (filter pred lis) - (let recur ((lis lis)) - (if (null? lis) - lis - (let ((head (car lis)) - (tail (cdr lis))) - (if (pred head) - (let ((new-tail (recur tail))) - (if (eq? tail new-tail) lis - (cons head new-tail))) - (recur tail)))))) - ;; Data type predicates and accessors. diff --git a/util.scm b/util.scm index 54bcd01a..102697c6 100644 --- a/util.scm +++ b/util.scm @@ -1,3 +1,10 @@ +;; +;; Cyclone Scheme +;; Copyright (c) 2015, Justin Ethier +;; All rights reserved. +;; +;; This module contains various utility functions. +;; (define (tagged-list? tag exp) (if (pair? exp) @@ -15,6 +22,21 @@ (define (integer->char-list n) (string->list (number->string n))) +;; Simplified version of filter from SRFI 1 +(define (filter pred lis) + (letrec ((recur (lambda (lis) + (if (null? lis) + lis + (let ((head (car lis)) + (tail (cdr lis))) + (if (pred head) + (let ((new-tail (recur tail))) + (if (eq? tail new-tail) lis + (cons head new-tail))) + (recur tail))))))) + (recur lis))) + + ;; Name-mangling. ;; We have to "mangle" Scheme identifiers into