Novejse vaje (drugo poglavje)
parent
90ce6643b1
commit
ed873d1590
|
@ -0,0 +1,94 @@
|
|||
|
||||
#+TITLE: Zapiski in vaje #6 srečanja programerskega bralnega krožka SICP
|
||||
#+AUTHOR: Jurij
|
||||
#+OPTIONS: toc:nil num:nil author
|
||||
|
||||
* Teme
|
||||
** Grajenje abstrakcij s podatki
|
||||
|
||||
Prvo poglavje, v katerem smo operirali s preprostimi števili, drugo poglavje nadgrajuje s podatkovnimi struktura oz. kombiniranjem podatkovnih objektov v sestavljene podatkovne modele.
|
||||
|
||||
Torej ustvarili bomo podatkovne abstrakcije in definirali funkcije ki lahko operirajo nad njimi.
|
||||
Preprost primer je recimo racionalno število, ki ga sestavlja par števca in imenovalca.
|
||||
|
||||
#+begin_src scheme
|
||||
(define (ustvari-rac s i)
|
||||
(cons s i))
|
||||
|
||||
(define (stevec x) (car x))
|
||||
(define (imenovalec x) (cdr x))
|
||||
(define (izpisi-rac x)
|
||||
(newline)
|
||||
(display (stevec x))
|
||||
(display "/")
|
||||
(display (imenovalec x)))
|
||||
|
||||
(define polovica (ustvari-rac 1 2))
|
||||
(izpisi-rac polovica)
|
||||
|
||||
(izpisi-rac (ustvari-rac 6 3))
|
||||
#+end_src
|
||||
|
||||
Uporabimo funkcijo za najvecji skupni imenovlec, da poenostavimo recimo 6/3 v 2/1.
|
||||
|
||||
#+begin_src scheme
|
||||
(define (gcd a b)
|
||||
(if (= b 0)
|
||||
a
|
||||
(gcd b (remainder a b))))
|
||||
|
||||
(define (ustvari-rac s i)
|
||||
(let ((g (gcd s i)))
|
||||
(cons (/ s g) (/ i g))))
|
||||
|
||||
|
||||
(izpisi-rac (ustvari-rac 6 3))
|
||||
#+end_src
|
||||
|
||||
|
||||
* vaje
|
||||
** 2.1 bolji ustvari-rac
|
||||
|
||||
#+begin_src scheme
|
||||
(define (ustvari-rac s i)
|
||||
(cons
|
||||
(if (< i 0)
|
||||
(* -1 s)
|
||||
s)
|
||||
(abs i)))
|
||||
#+end_src
|
||||
|
||||
** 2.2 polovica daljice
|
||||
|
||||
#+begin_src scheme
|
||||
(define make-point cons)
|
||||
(define x-point car)
|
||||
(define y-point cdr)
|
||||
|
||||
(define make-segment cons)
|
||||
|
||||
(define (print-point p)
|
||||
(newline)
|
||||
(display "(")
|
||||
(display (x-point p))
|
||||
(display ",")
|
||||
(display (y-point p))
|
||||
(display ")"))
|
||||
|
||||
(define (avg a b) (/ (+ a b) 2))
|
||||
|
||||
(define start-segment car)
|
||||
(define end-segment cdr)
|
||||
|
||||
(define (midpoint-segment s)
|
||||
(let ((start (start-segment s))
|
||||
(end (end-segment s)))
|
||||
(make-point (avg (x-point start) (x-point end))
|
||||
(avg (y-point start) (y-point end)))))
|
||||
#+end_src
|
||||
|
||||
** 3.3 obseg in ploscina kvadra
|
||||
|
||||
#+begin_src scheme
|
||||
|
||||
#+end_src
|
Loading…
Reference in New Issue