SW wykład 6 - Slajd6: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Arturas (dyskusja | edycje)
Nie podano opisu zmian
Tarlecki (dyskusja | edycje)
Nie podano opisu zmian
Linia 1: Linia 1:
{{Semantyka i weryfikacja programów/Wykład 6}}
{{Semantyka i weryfikacja programów/Wykład 6}}
[[Grafika:sw0605.png|center|frame]]
[[Grafika:sw0605.png|center|frame]]
Klauzula dla wywołania procedur jednoparametrowych z parametrem
przekazywanym przez wartość jest także dość prosta.  Przy wywołaniu
takiej procedury dla danych środowisk zmiennych i procedur i w danym
składzie, najpierw sprawdzamy, czy jej identyfikatorowi w danym
środowisku procedur jest przypisane znaczenie procedury
jednoparametrowej z parametrem przekazywanym przez wartość.  Następnie
wyznaczamy wartość w danym środowisku zmiennych i w danym składzie
wyrażenia będącego parametrem aktualnym. Tak wyznaczoną liczbę
przekazujemy jako argument dla znaczenia tej procedury, i
przekształcamy stan w sposób przez nie zadany. Oczywiście, w każdym z
tych kroków może pojawić się błąd, który powoduje, że wynikiem jest
znów sygnał błędu.
Klauzula dla deklaracji takich procedur jest nieco bardziej
skomplikowana. W środowisku procedur przypisujemy identyfikatorowi
deklarowanej procedury znaczenie, które dla danej wartości (liczbowej)
parametru aktualnego i w danym składzie początkowym, najpierw wyznacza
niewykorzystywaną lokację i przypisuje ją w środowisku zmiennych
parametrowi formalnemu (jednocześnie odpowiednio modyfikując skład,
jak przy deklaracji zmiennej --- wykład 5, slajd 8), a następnie
wylicza wynik znaczenia ciała procedury w tak zmodyfikowanym
środowisku zmiennych, w środowisku procedur zmodyfikowanym przez
przypisanie identyfikatorowi deklarowanej procedury właśnie
definiowanego znaczenia i w składzie początkowym zmodyfikowanym przez
zajęcie nowej lokacji.
Zauważmy, że rzeczywiście efekt tych definicji jest zgodny z
oczekiwaniami wobec tego trybu przekazywania parametrów: w ciele
procedury parametr formalny jest inicjalizowany otrzymując wartość
parametru aktualnego. Dalej możemy się nim posługiwać jak każdą
(zadeklarowaną i zainicjalizowaną) zmienną. Jednak możliwe zmiany tej
zmiennej w ciele procedury nie będą widoczne po zakończeniu wywołania:
dotyczyć one będą bowiem nowej lokacji, która nie była przypisana
żadnej zmiennej zadeklarowanej w środowisku "na zewnątrz" wywołania
procedury, a zatem jej zawartość nie może być w takim środowisku
"odczytana".

Wersja z 12:01, 28 wrz 2006

<<powrót do strony wykładu

Parametry Semantyka procedur Semantyka procedur, c.d. Semantyka procedur bezparametrowych Przekazywanie przez zmienną Przekazywanie przez wartość Przekazywanie przez nazwę Wejście/wyjście Semantyka wejścia/wyjścia Semantyka wejścia/wyjścia, c.d. Semantyka wejścia/wyjścia, c.d. Programy Problem Nowe podejście Kontynuacje

Klauzula dla wywołania procedur jednoparametrowych z parametrem przekazywanym przez wartość jest także dość prosta. Przy wywołaniu takiej procedury dla danych środowisk zmiennych i procedur i w danym składzie, najpierw sprawdzamy, czy jej identyfikatorowi w danym środowisku procedur jest przypisane znaczenie procedury jednoparametrowej z parametrem przekazywanym przez wartość. Następnie wyznaczamy wartość w danym środowisku zmiennych i w danym składzie wyrażenia będącego parametrem aktualnym. Tak wyznaczoną liczbę przekazujemy jako argument dla znaczenia tej procedury, i przekształcamy stan w sposób przez nie zadany. Oczywiście, w każdym z tych kroków może pojawić się błąd, który powoduje, że wynikiem jest znów sygnał błędu.

Klauzula dla deklaracji takich procedur jest nieco bardziej skomplikowana. W środowisku procedur przypisujemy identyfikatorowi deklarowanej procedury znaczenie, które dla danej wartości (liczbowej) parametru aktualnego i w danym składzie początkowym, najpierw wyznacza niewykorzystywaną lokację i przypisuje ją w środowisku zmiennych parametrowi formalnemu (jednocześnie odpowiednio modyfikując skład, jak przy deklaracji zmiennej --- wykład 5, slajd 8), a następnie wylicza wynik znaczenia ciała procedury w tak zmodyfikowanym środowisku zmiennych, w środowisku procedur zmodyfikowanym przez przypisanie identyfikatorowi deklarowanej procedury właśnie definiowanego znaczenia i w składzie początkowym zmodyfikowanym przez zajęcie nowej lokacji.

Zauważmy, że rzeczywiście efekt tych definicji jest zgodny z oczekiwaniami wobec tego trybu przekazywania parametrów: w ciele procedury parametr formalny jest inicjalizowany otrzymując wartość parametru aktualnego. Dalej możemy się nim posługiwać jak każdą (zadeklarowaną i zainicjalizowaną) zmienną. Jednak możliwe zmiany tej zmiennej w ciele procedury nie będą widoczne po zakończeniu wywołania: dotyczyć one będą bowiem nowej lokacji, która nie była przypisana żadnej zmiennej zadeklarowanej w środowisku "na zewnątrz" wywołania procedury, a zatem jej zawartość nie może być w takim środowisku "odczytana".