OCaml/Tablice
Z Wikibooks, biblioteki wolnych podręczników.
Tablice są przykładem imperatywnych elementów w języku OCaml. Można by zapytać: ,,Co w nich takiego imperatywnego?. Większość typów w Camlu jest niezmienna (ang. immutable). Dla przykładu listy. Jeśli raz stworzymy listę i potem zachcemy zmienić w niej jeden element musimy całą listę zbudować od nowa zmieniając jeden element. Właściwie podobnie jest z etykietami. Tablice natomiast można dowolnie zmieniać. Można także w ten sam sposób postąpić z rekordami (używając słowa kluczowego mutable).
-
# let arr = [| "Hello"; "World" |];;
-
val arr : string array = [|"Hello"; "World"|]
-
-
# arr.(0);;
-
- : string = "Hello"
-
-
# arr.(0) <- "test";;
-
- : unit = ()
-
-
# arr.(1).[4];;
-
- : char = 'd'
-
-
# arr.(1).[4] <- 'X';;
-
- : unit = ()
-
-
# arr;;
-
- : string array = [|"test"; "WorlX"|]
W powyższym przykładzie w linii pierwszej stworzona została tablica z przypisaną jej nazwą "arr". Następnie odwołaliśmy się do pierwszego elementu tablicy (o indeksie zero) i zmieniliśmy jego wartość na ciąg "test".
W linii 10, odwołaliśmy się do pojedynczego znaku ciągu. Jak widać robi się to z wykorzystaniem zapisu: ciąg.(indeks), czyli używając nawiasu okrągłego -- nie kwadratowego jak to się dzieje w przypadku tablic. Następnie zmieniliśmy ów znak ciągu na inny. Ciągi znaków też mają imperatywną charakterystykę w Camlu -- jeśli ktoś potrzebuje czysto funkcyjne ciągi tworzy je jako listę znaków. Są trochę wolniejsze o tych wbudowanych natywnie język. W module Pervasives jest zdefiniowany operator '^' -- funkcja, która pobiera dwa ciągi i zwraca jeden, będący sklejeniem ciągów składowych.