From 52647de62613231133698345fd1b64f0e981a1a5 Mon Sep 17 00:00:00 2001 From: Timothy Warren Date: Tue, 19 Mar 2019 11:28:30 -0400 Subject: [PATCH] Add some example code from second chapter --- chapter2.scm | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 chapter2.scm diff --git a/chapter2.scm b/chapter2.scm new file mode 100644 index 0000000..3e20224 --- /dev/null +++ b/chapter2.scm @@ -0,0 +1,77 @@ +#lang sicp +(define (gcd a b) + (if (= b 0) + a + (gcd b (remainder a b)))) + +(define (add-rat x y) + (make-rat (+ (* (numer x) (denom y)) + (* (numer y) (denom x))) + (* (denom x) (denom y)))) + +(define (sub-rat x y) + (make-rat (- (* (numer x) (denom y)) + (* (numer y) (denom x))) + (* (denom x) (denom y)))) + +(define (mul-rat x y) + (make-rat (* (numer x) (numer y)) + (* (denom x) (denom y)))) + +(define (div-rat x y) + (make-rat (* (numer x) (denom y)) + (* (denom x) (numer y)))) + +(define (equal-rat? x y) + (= (* (numer x) (denom y)) + (* (numer y) (denom x)))) + +(define (make-rat n d) + (let ((g (gcd n d))) + (cons (/ n g) + (/ d g)))) +(define (numer x) (car x)) +(define (denom x) (cdr x)) + +(define (print-rat x) + (newline) + (display (numer x)) + (display "/") + (display (denom x))) + +(define one-half (make-rat 1 2)) +(define one-third (make-rat 1 3)) +(define one-through-four (list 1 2 3 4)) + +(define (list-ref items n) + (if (= n 0) + (car items) + (list-ref (cdr items) + (- n 1)))) + +;(define (length items) +; (if (null? items) +; 0 +; (+ 1 (length (cdr items))))) + +(define (length items) + (define (length-iter a count) + (if (null? a) + count + (length-iter (cdr a) + (+ 1 count)))) + (length-iter items 0)) + +(define (append list1 list2) + (if (null? list1) + list2 + (cons (car list1) + (append (cdr list1) + list2)))) + +(define (scale-list items factor) + (if (null? items) + nil + (cons (* (car items) factor) + (scale-list (cdr items) + factor)))) \ No newline at end of file