SW wykład 6 - Slajd6
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".