listede geçerli ints
tüm bir null değer olarak 0
kullanabilirsiniz kesinlikle olumlu ise, veya ~1
, 0
geçerli ise, ancak negatifler değildir. Aksi halde, int option
'u kullanabilirsiniz. Bir şey gibi:
fun set key value [] = []
| set key value ((k,v)::pairs) =
if k = key then (k, SOME value) :: pairs
else (k,v) :: (set key value pairs)
fun lookup key ((k,v)::pairs) =
if k = key then v else lookup key pairs
fun initDict keys = map (fn k => (k,NONE)) keys;
O zaman, örneğin:
- val gamma = initDict ["a","b","c"]: (string * int option) list;
val gamma = [("a",NONE),("b",NONE),("c",NONE)] : (string * int option) list
yapabilirsiniz böylece gibi "değişim" değerler:
= set "b" 30 gamma;
[("a",NONE),("b",SOME 30),("c",NONE)] : (string * int option) list
Değerler böyle okunabilir:
- lookup "a" gamma;
val it = NONE : int option
- lookup "b" gamma;
val it = SOME 30 : int option
Not: lookup
thr anahtar sözlükte yoksa bir hata yapar. NONE
'u girişler için boş bir değer olarak kullandığımız için, bir anahtarın yokluğu için bir işaret olarak da çalışamaz.
- valOf (lookup "b" gamma);
val it = 30 : int
korkutmak yukarıda yeni bir liste oluşturur ve isim gamma
için bağlamalar set
bu yaklaşımla çünkü vardı etrafında "değişim" tırnak:
gerçek değerler
valOf
operatörünü kullanarak seçenekler elde edilebilir yerine
gamma
'u değiştirmek yerine. Bu liste büyükse, bu (listenin üzerindeki sabit doğrusal aramaların yanı sıra) oldukça verimsiz hale gelir. Bir aşamada, değiştirilebilir veri yapılarını (örneğin,
refs
'un sıralanmış dizileri) kullanmaya başlamak isteyebilirsiniz.