Rekordy
Aby modelować dane złożone z pól (np. dane z bazy danych) zamiast posługiwać się krotkami to użyjemy rekordów. Rekordy aby były funkcyjną strukturą danych są niemutowalne.
Na początku musimy zdefiniować typ rekordu:
1: 2: 3: 4: 5: 6: 7: |
|
Aby utworzyć wartość tego typu posłużymy się bardzo podobną składnią, ale do przypisania wartości pól użyjemy =.
1:
|
|
Aby dokonywać modyfikacji stanu, będziemy tworzyli funkcje, które przyjmują rekord i zwracają nowy zaktualizowany.
1: 2: |
|
Powyżej widzimy składnię aktualizacji rekordów oraz składnię odwołania się do konkretnego pola.
Zadanie
Opracuj obiekt Random, który będzie zawierał stan (stałe oraz seed) służący do generowania kolejnej liczby pseudolosowej. Do tego napisz funkcję newRandom, która przyjmuje wartość początkową seeda, oraz funkcję nextRandom o sygnaturze Random -> Random * int. Przetestuj działanie generatora liczb pseudolosowych tworząc funkcję randomArray, która przyjmuje początkowy seed i liczbę elementów do wygenerowania.
Pytania? Jeśli wszystko jasne, to przechodzimy do następnego modułu
| Caucasian
| Asian
| Black
Full name: Rec.SkinColor
{Name: string;
Age: int;
Skin: SkinColor;}
Full name: Rec.Person
val string : value:'T -> string
Full name: Microsoft.FSharp.Core.Operators.string
--------------------
type string = System.String
Full name: Microsoft.FSharp.Core.string
val int : value:'T -> int (requires member op_Explicit)
Full name: Microsoft.FSharp.Core.Operators.int
--------------------
type int = int32
Full name: Microsoft.FSharp.Core.int
--------------------
type int<'Measure> = int
Full name: Microsoft.FSharp.Core.int<_>
Full name: Rec.jim
Full name: Rec.makeOlder
Full name: Rec.jim'