Last active
June 29, 2018 19:52
-
-
Save NoahDragon/daf3a12d3876e4d7f7a2ea3d5dba2ebd to your computer and use it in GitHub Desktop.
Functions in "The Little Schemer" book.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#lang scheme | |
(define atom? | |
(lambda (x) | |
(and (not (pair? x)) (not (null? x))))) | |
(define lat? | |
(lambda (l) | |
(cond | |
((null? l) #t) | |
((atom? (car l)) (lat? (cdr l))) | |
(else #f)))) | |
(define member? | |
(lambda (a lat) | |
(cond | |
((null? lat) #f) | |
(else (or (eq? (car lat) a) | |
(member? a (cdr lat))))))) | |
(define rember | |
(lambda (a lat) | |
(cond | |
((null? lat) (quote ())) | |
(else (cond | |
((eq? (car lat) a) (cdr lat)) | |
(else (cons (car lat) | |
(rember a | |
(cdr lat))))))))) | |
(define firsts | |
(lambda (l) | |
(cond | |
((null? l) (quote ())) | |
(else (cons (car (car l)) | |
(firsts (cdr l))))))) | |
(define insertR | |
(lambda (new old lat) | |
(cond | |
((null? lat) (quote ())) | |
((eq? (car lat) old) (cons old (cons new (cdr lat)))) | |
(else (cons (car lat) (insertR new old (cdr lat))))))) | |
(define insertL | |
(lambda (new old lat) | |
(cond | |
((null? lat) (quote ())) | |
((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) (quote ())) | |
((eq? (car lat) old) (cons new (cdr lat))) | |
(else (cons (car lat) (subst new old (cdr lat))))))) | |
(define subst2 | |
(lambda (new o1 o2 lat) | |
(cond | |
((null? lat) (quote ())) | |
((or (eq? (car lat) o1) (eq? (car lat) o2)) | |
(cons new (cdr lat))) | |
(else (cons (car lat) (subst2 new o1 o2 (cdr lat))))))) | |
(define multirember | |
(lambda (a lat) | |
(cond | |
((null? lat) (quote ())) | |
((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) (quote ())) | |
((eq? (car lat) old) (cons old | |
(cons new (multiinsertR new old (cdr lat))))) | |
(else (cons (car lat) | |
(multiinsertR new old (cdr lat))))))) | |
(define multiinsertL | |
(lambda (new old lat) | |
(cond | |
((null? lat) (quote ())) | |
((eq? (car lat) old) (cons new | |
(cons old (multiinsertL new old (cdr lat))))) | |
(else (cons (car lat) | |
(multiinsertL new old (cdr lat))))))) | |
(define multisubst | |
(lambda (new old lat) | |
(cond | |
((null? lat) (quote ())) | |
((eq? (car lat) old) (cons new (multisubst new old (cdr lat)))) | |
(else (cons (car lat) | |
(multisubst new old (cdr lat))))))) | |
(define + | |
(lambda (v1 v2) | |
(cond | |
((zero? v2) v1); zero? like null? | |
(else (add1 (+ v1 (sub1 v2))))))); add1 like cons for list | |
(define - | |
(lambda (v1 v2) | |
(cond | |
((zero? v2) v1) | |
(else (sub1 (- v1 (sub1 v2))))))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment