Novejse vaje (drugo poglavje)

main
Jurij Podgoršek 2024-07-24 20:18:38 +02:00
parent 90ce6643b1
commit ed873d1590
1 changed files with 94 additions and 0 deletions

View File

@ -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