SW wykład 6 - Slajd6: Różnice pomiędzy wersjami
Nie podano opisu zmian |
Nie podano opisu zmian |
||
(Nie pokazano 3 wersji utworzonych przez 3 użytkowników) | |||
Linia 1: | Linia 1: | ||
{{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". |
Aktualna wersja na dzień 15:31, 29 wrz 2006
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".