Cleaner flattening now that code generation has been fixed

This commit is contained in:
Justin Ethier 2018-11-01 13:20:20 -04:00
parent 61d265c512
commit 5868cd448c
2 changed files with 22 additions and 21 deletions

View file

@ -3,37 +3,38 @@
(define sexp (define sexp
'(Cyc-seq '(Cyc-seq
(set! b '(#f . #f)) (set! b '(#f . #f))
((Cyc-seq (Cyc-seq
(set-car! a 1) (set-car! a 1)
((Cyc-seq (Cyc-seq
(set-cdr! a '(2)))))))) (set-cdr! a '(2))
((fnc a1 a2 a3))))))
;; Flatten a list containing subcalls of a given symbol. ;; Flatten a list containing subcalls of a given symbol.
;; For example, the expression: ;; For example, the expression:
;; ;;
;; '(Cyc-seq ;; '(Cyc-seq
;; (set! b '(#f . #f)) ;; (set! b '(#f . #f))
;; ((Cyc-seq ;; (Cyc-seq
;; (set-car! a 1) ;; (set-car! a 1)
;; ((Cyc-seq ;; (Cyc-seq
;; (set-cdr! a '(2))))))) ;; (set-cdr! a '(2))
;; ((fnc a1 a2 a3)))))
;; ;;
;; becomes: ;; becomes:
;; ;;
;; '(Cyc-seq ;; '(Cyc-seq
;; (set! b '(#f . #f)) ;; (set! b '(#f . #f))
;; (set-car! a 1) ;; (set-car! a 1)
;; (set-cdr! a '(2))) ;; (set-cdr! a '(2))
;; ((fnc a1 a2 a3)))
;; ;;
(define (flatten-subcalls sexp sym) (define (flatten-subcalls sexp sym)
(define (flat sexp acc) (define (flat sexp acc)
(cond (cond
((not (pair? sexp)) ((not (pair? sexp))
acc) acc)
((and (app? (car sexp)) ((and (tagged-list? sym (car sexp)))
(app? (caar sexp)) (flat (cdar sexp) acc))
(tagged-list? sym (caar sexp)))
(flat (cdaar sexp) acc))
(else ;;(pair? sexp) (else ;;(pair? sexp)
(flat (cdr sexp) (cons (car sexp) acc)))) (flat (cdr sexp) (cons (car sexp) acc))))
) )

View file

@ -814,27 +814,27 @@
;; ;;
;; '(Cyc-seq ;; '(Cyc-seq
;; (set! b '(#f . #f)) ;; (set! b '(#f . #f))
;; ((Cyc-seq ;; (Cyc-seq
;; (set-car! a 1) ;; (set-car! a 1)
;; ((Cyc-seq ;; (Cyc-seq
;; (set-cdr! a '(2))))))) ;; (set-cdr! a '(2))
;; ((fnc a1 a2 a3)))))
;; ;;
;; becomes: ;; becomes:
;; ;;
;; '(Cyc-seq ;; '(Cyc-seq
;; (set! b '(#f . #f)) ;; (set! b '(#f . #f))
;; (set-car! a 1) ;; (set-car! a 1)
;; (set-cdr! a '(2))) ;; (set-cdr! a '(2))
;; ((fnc a1 a2 a3)))
;; ;;
(define (flatten-subcalls sexp sym) (define (flatten-subcalls sexp sym)
(define (flat sexp acc) (define (flat sexp acc)
(cond (cond
((not (pair? sexp)) ((not (pair? sexp))
acc) acc)
((and (app? (car sexp)) ((and (tagged-list? sym (car sexp)))
(app? (caar sexp)) (flat (cdar sexp) acc))
(tagged-list? sym (caar sexp)))
(flat (cdaar sexp) acc))
(else ;;(pair? sexp) (else ;;(pair? sexp)
(flat (cdr sexp) (cons (car sexp) acc)))) (flat (cdr sexp) (cons (car sexp) acc))))
) )