From 5cf44816048a733f61009b532150e0030981a21c Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Thu, 25 Jun 2015 21:14:06 -0400 Subject: [PATCH] Migrated (filter) to the util module Relocated as this function is required by the transform and library modules. Also rewrote it to use letrec instead of named let, as the latter is not support yet by cyclone. --- scheme/cyclone/util.sld | 1 + transforms.scm | 13 ------------- util.scm | 22 ++++++++++++++++++++++ 3 files changed, 23 insertions(+), 13 deletions(-) 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