model swiata.txt
1.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
(* w definicjach pól typy wartości są zawsze takie jak nazwy pól *)
type piłka = {rozmiar; kolor; położenie; rodzaj; tworzywo; czas_stworzenia}
(* mozna dodać "przeznaczenie" *)
(* definicja wartościami cech zdefiniowanymi za pomocą typów *)
let moja_piłka = {rozmiar=duża; kolor=zielony; położenie=pod stołem; rodzaj=dmuchana; tworzywo=plastik; czas_stworzenia=2 lata temu}
(* definicja wartościami cech zdefiniowanymi za pomocą instancji, albo singletonowych typów *)
let moja_piłka_exact = {rozmiar=średnica 30cm; kolor=0,190,0; położenie=92E,120N,123H; czas_stworzenia=2014-06-25 8:35 CEST}
(* typy to zbiory indywiduów *)
(* kolor to nazwa cechy a zielony to jej wartość *)
type kolor = {r: int; g: int; b: int}
type zieleń = subtype of kolor (* Słowosieć *)
type zielony = zieleń
type pod_stołem = subtype miejsce
type miejsce = położenie
let moj_stoł = {położenie=92E,120N,124H}
let moje_pod obiekt = {obiekt.położenie with H=obiekt.położenie.H - 1}
type kolor_piłki = subtype kolor
type kolor_fun = obiekt -> kolor
let moja_kolor_fun obiekt = obiekt.kolor
let zielona_piłka = {piłka where kolor=zielony}
let kolor_piłki = kolor_fun piłka = piłka.kolor = {kolor where piłka.kolor = this}
zielony(z), piłka(p), attr(p,z)
(* attr(p,z) zwraca true wtw.
cecha p, która jest zgodna typem z z ma wartość zgodną z z,
albo prościej: z jest cechą p
w drugim przypadku obiekty są zbiorami (wartości) cech a nie rekordami *)
kolor(k), piłka(p), poss(k,p)
(* poss(k,p) zwraca true wtw.
cecha p, która jest zgodna typem z k ma wartość zgodną z k,
*)
(* podobnie ojciec Stefana *)
let ojciec osoba = osoba.ojciec
Wyłuskiwanie cechy () vs nadawanie wartości cesze (zawężenie znaczenia podrzędnika).
(* piłka Franciszka - sytuacja jest inna bo mamy tu relację poss, piłka może
mieć właściciela a właściciel piłkę *)