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