;; This is a temporary file for testing (import (scheme base) (scheme write) (scheme cyclone transforms) ) (define-c symbolfn)(data,&local_7350, sym_731_7312, Cyc_car(data, S_732_7313))) ){ //pair_type local_7356; //return_closcall1(data, k_7318, set_pair_as_expr(&local_7356, sym_731_7312, S_732_7313)); pair_type* local_7356 = alloca(sizeof(pair_type)); set_pair(local_7356, sym_731_7312, S_732_7313); result = local_7356; break; } else { pair_type *p = alloca(sizeof(pair_type)); set_pair(p, Cyc_car(data, S_732_7313), NULL); if (acc == NULL) { acc = p; acc_tail = acc; } else { cdr(acc_tail) = p; acc_tail = p; } S_732_7313 = Cyc_cdr(data, S_732_7313); continue; } } } else { //pair_type local_7363; //return_closcall1(data, k_7318, set_cell_as_expr(&local_7363, sym_731_7312)); pair_type *local_7363 = alloca(sizeof(pair_type)); set_pair(local_7363, sym_731_7312, NULL); result = local_7363; break; } } if (acc) { cdr(acc_tail) = result; return_closcall1(data, k_7318, (object)acc); } else { return_closcall1(data, k_7318, result); } ") ; ;(define (union set1 set2) ; (inner-union set1 (dedupe set2))) ; ;(define (inner-union set1 set2) ; ; NOTE: This should be implemented as merge for efficiency. ; (if (not (pair? set1)) ; set2 ; (insert (car set1) (inner-union (cdr set1) set2)))) ; ;;; Remove consecutive duplicates from a list ;(define (dedupe lis) ; (cond ; ((null? lis) lis) ; ((null? (cdr lis)) lis) ; ((eq? (car lis) (cadr lis)) ; (dedupe (cdr lis))) ; (else ; (cons (car lis) (dedupe (cdr lis)))))) ; ;(write (union '(a a a a b b c c c) '())) ;(write (union '(a b c) '(a a a a b b c c c) )) ; ;(define (union set1 set2) ; ; NOTE: This should be implemented as merge for efficiency. ; (if (not (pair? set1)) ; set2 ; (insert 'todo #;(car set1) (union (cdr set1) set2)))) ; ;(write (union '(a b) '(c d))) (define (union l1 l2) (inner-union #f l1 l2)) (define inner-union (lambda (last l1 l2) (if (null? l1) (next last l2) (if (null? l2) (next last l1) ;; TODO: also have an eq? check to eliminate duplicates (if (symbol