Programowanie funkcyjne/Techniki uleniwiania i spamiętywania/Ćwiczenia: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Dorota (dyskusja | edycje)
Nie podano opisu zmian
Kubica (dyskusja | edycje)
Linia 9: Linia 9:
   '''let''' saldo = '''ref''' 0
   '''let''' saldo = '''ref''' 0
   '''in''' ...
   '''in''' ...
* Zdefiniuj "rzadkie tablice" (jednowymiarowe). Tworząc tablicę podajemy jej rozmiar oraz procedurę inicjującą komórki tablicy (sparametryzowaną indeksem komórki). Początkowo tablica jest faktycznie pusta. Próba odczytania niezaalokowanego elementu powoduje jego alokację i wywołanie procedury inicjującej.  Próba zapisu do niezaalokowanego elementu powoduje alokację i zapis, bez wywoływania procedury inicjującej. Elementy zaalokowane istnieją od chwili alokacji do końca życia całej tablicy.
: Zdefiniuj typ reprezentujący rzadkie tablice oraz nastepujące operacje:
:* utworzenie rzadkiej tablicy,
:* odczytanie elementu z tablicy,
:* zapisanie elementu do tablicy.
* W jaki sposób można połączyć technikę uleniwiania (ze spamiętywaniem) z programowaniem dynamicznym, tak aby obliczane były tylko te instancje podproblemów, które faktycznie muszą być obliczone?
* W jaki sposób można połączyć technikę uleniwiania (ze spamiętywaniem) z programowaniem dynamicznym, tak aby obliczane były tylko te instancje podproblemów, które faktycznie muszą być obliczone?

Wersja z 14:24, 14 lis 2006

Praca domowa

  • Wyrażenie warunkowe if-then-else nie jest procedurą, lecz formą specjalną, gdyż jest leniwe. W zależności od wartości warunku, tylko jeden z pozostałych członów jest obliczany. Napisz procedurę trójargumentową, która działa tak, jak if-then-else. Które z jej argumentów muszą być odroczone?
  • Napisz generator odroczonych liczb całkowitych. W momencie wymuszenia obliczenia takiej liczby powinna ona być wczytywana z wejścia. Wczytywaniu powinien towarzyszyć tekst podawany jako parametr przy generowaniu odroczonej liczby.
  • Napisz generator odroczonych liczb losowych. Wartość każdej takiej liczby powinna być losowana dopiero w momencie wymuszenia jej obliczenia, jednak musi być zagwarantowane, że jest ona inna od wszystkich wcześniej wylosowanych liczb. Może być przydatna procedura Random.int.

Ćwiczenia

  • Co by się stało, gdyby definicja procedury konto (z przykładu "Konto bankowe") nie miała argumentusaldo, lecz zaczynała się jak poniżej?
let konto = 
  let saldo = ref 0
  in ...
  • Zdefiniuj "rzadkie tablice" (jednowymiarowe). Tworząc tablicę podajemy jej rozmiar oraz procedurę inicjującą komórki tablicy (sparametryzowaną indeksem komórki). Początkowo tablica jest faktycznie pusta. Próba odczytania niezaalokowanego elementu powoduje jego alokację i wywołanie procedury inicjującej. Próba zapisu do niezaalokowanego elementu powoduje alokację i zapis, bez wywoływania procedury inicjującej. Elementy zaalokowane istnieją od chwili alokacji do końca życia całej tablicy.
Zdefiniuj typ reprezentujący rzadkie tablice oraz nastepujące operacje:
  • utworzenie rzadkiej tablicy,
  • odczytanie elementu z tablicy,
  • zapisanie elementu do tablicy.
  • W jaki sposób można połączyć technikę uleniwiania (ze spamiętywaniem) z programowaniem dynamicznym, tak aby obliczane były tylko te instancje podproblemów, które faktycznie muszą być obliczone?