Skip to content

Instantly share code, notes, and snippets.

@dce
Created April 29, 2010 04:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dce/383143 to your computer and use it in GitHub Desktop.
Save dce/383143 to your computer and use it in GitHub Desktop.
(define lat?
(lambda (l)
(or (null? l) (and (atom? (car l)) (lat? (cdr l))))))
(define rember
(lambda (a lat)
(cond
((null? lat) lat)
((eq? a (car lat)) (cdr lat))
(else (cons (car lat) (rember a (cdr lat)))))))
(define firsts
(lambda (l)
(cond
((null? l) `())
(else (cons (car (car l)) (firsts (cdr l)))))))
(define insertR
(lambda (new old lat)
(cond
((null? lat) `())
((eq? (car lat) old) (cons (car lat) (cons new (cdr lat))))
(else (cons (car lat) (insertR new old (cdr lat)))))))
(define insertL
(lambda (new old lat)
(cond
((null? lat) `())
((eq? (car lat) old) (cons new lat))
(else (cons (car lat) (insertL new old (cdr lat)))))))
(define subst
(lambda (new old lat)
(cond
((null? lat) `())
((eq? (car lat) old) (cons new (cdr lat)))
(else (cons (car lat) (insertL new old (cdr lat)))))))
(define subst2
(lambda (new old1 old2 lat)
(cond
((null? lat) `())
((or (eq? (car lat) old1) (eq? (car lat) old2)) (cons new (cdr lat)))
(else (cons (car lat) (insertL new old1 old2 (cdr lat)))))))
(define multirember
(lambda (a lat)
(cond
((null? lat) `())
((eq? (car lat) a) (multirember a (cdr lat)))
(else (cons (car lat) (multirember a (cdr lat)))))))
(define multiinsertR
(lambda (new old lat)
(cond
((null? lat) `())
((eq? (car lat) old) (cons old (cons new (multiinsertR new old (cdr lat)))))
(else (cons (car lat) (multiinsertR new old (cdr lat)))))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment