Zadanie 2: Origami

Origami

Zaimplementuj bibliotekę dla fanów origami do badania ile warstw ma w danym punkcie sprytnie poskładana kartka papieru.
Biblioteka powinna implementować interfejs origami.mli, podany poniżej

 
    type point = float * float
    (** Punkt na płaszczyźnie *)
 
    type kartka = point -> int
    (** Poskładana kartka: ile razy kartkę przebije szpilka wbita w danym punkcie *)
 
    val prostokat : point -> point -> kartka
    (** [prostokat p1 p2] zwraca kartkę, reprezentującą domknięty prostokąt
        o bokach równoległych do osi układu współrzędnych i lewym dolnym rogu [p1]
        a prawym górnym [p2]. Punkt [p1] musi więc być nieostro na lewo i w dół
        od punktu [p2]. Gdy w kartkę tę wbije się szpilkę wewnątrz
        (lub na krawędziach) prostokąta, kartka zostanie przebita 1 raz,
        w pozostałych przypadkach 0 razy *)
 
    val kolko : point -> float -> kartka
    (** [kolko p r] zwraca kartkę, reprezentującą kółko domknięte o środku w punkcie [p] i promieniu [r] *)
 
    val zloz : point -> point -> kartka -> kartka
    (** [zloz p1 p2 k] składa kartkę [k] wzdłuż prostej przechodzącej przez
        punkty [p1] i [p2] (muszą to być różne punkty). Papier jest składany
	w ten sposób, że z prawej strony prostej (patrząc w kierunku od [p1] do [p2])
	jest przekładany na lewą. Wynikiem funkcji jest złożona kartka. Jej
	przebicie po prawej stronie prostej powinno więc zwrócić 0.
	Przebicie dokładnie na prostej powinno zwrócić tyle samo,
	co przebicie kartki przed złożeniem. Po stronie lewej -
	tyle co przed złożeniem plus przebicie rozłożonej kartki w punkcie,
	który nałożył się na punkt przebicia. *)
 
    val skladaj : (point * point) list -> kartka -> kartka
    (** [skladaj [(p1_1,p2_1);...;(p1_n,p2_n)] k = zloz p1_n p2_n (zloz ... (zloz p1_1 p2_1 k)...)]
        czyli wynikiem jest złożenie kartki [k] kolejno wzdłuż wszystkich prostych
	z listy *) 
 

Rozwiązując to zadanie powinieneś skorzystać ze standardowych procedur wyższych rzędów przetwarzających listy.
W przeciwnym przypadku Twoje rozwiązanie zostanie ocenione trochę niżej.
Termin wykonania zadania ustala prowadzący -- 2 tygodnie po ogłoszeniu

ZałącznikWielkość
wpf-2-origami.mli1.62 KB