CSL-CROOK - Instrukcje złożone z łańcuchami badań

Z MERA 400 wiki
Przejdź do nawigacji Przejdź do wyszukiwania

Opisane dotychczas instrukcje warunkowe były uzależnione od pojedynczego testu. Możliwe jest jednak takie połączenie szeregu instrukcji testowych, aby ich rezultat końcowy był pojedynczy TRUE lub FALSE. Instrukcja złożona składa się z instrukcji tytułowej, po której następuje ciąg instrukcji tworzący łańcuch badań. Instrukcje z łańcucha badań to arytmetyczne instrukcje badające oraz instrukcje badania zbiorów. łańcuch badań stanowi grupę wciętą instrukcji o wspólnym stopniu wcięcia. Instrukcja tytułowa łańcucha steruje powtarzaniem łańcucha, podobnie jak to się odbywa z instrukcjami znajdującymi się w zakresie instrukcji FOR. Powtarzanie łańcucha testów sterowane jest przez indeksowanie według zbioru. Instrukcja nagłówkowa określa nazwę zbioru i zmienną indeksową, która kolejno przybiera wartości indeksu obiektu każdego elementu zbioru.

Ostateczny rezultat instrukcji złożonej jest zależny od liczby elementów zbioru, które spełniają warunki łańcucha testów oraz różnych kryteriów ustalonych przez poszczególne typy opisanych poniżej instrukcji tytułowych.

Instrukcja CHAIN

Postać instrukcji:

CHAIN e1 @ e2
:
: (instrukcje łańcucha badań)

Jeżeli wszystkie instrukcje warunkowe łańcucha badań są spełnione (TRUE), to następuje skok do instrukcji o etykiecie e1. Natomiast jeżeli chociaż jedna instrukcja z łańcucha nie jest spełniona (TRUE), to nastąpi skok do etykiety e2.

Instrukcja ALL

Postać instrukcji:

ALL n Z1 e1 @ e2
:
: (instrukcje łańcucha badań)

Łańcuch badań jest powtarzany ze zmienną <n> przyjmującą kolejne wartości indeksów obiektu elementów zbioru Z1. Skok do etykiety e1 nastąpi wtedy gdy wszystkie instrukcje warunkowe z łańcucha będą miały wartość TRUE, w przeciwnym wypadku nastąpi skok do etykiety e2.

Instrukcja UNIQUE

Postać instrukcji:

UNIQUE (w) n Z1 e1 @ e
:
: (instrukcje łańcucha badań)

Skok do etykiety e1 nastąpi wtedy, gdy dokładnie tyle obiektów zbioru Z1 spełnia warunkowe instrukcje z łańcucha badań, ile wynosi wartość wyrażenia <w>. W innym przypadku skok następuje do etykiety e2.

Instrukcja COUNT

Postać instrukcji:

COUNT n Z1
:
: (instrukcje łańcucha badań)

Jeżeli instrukcja tytułowa występuje z łańcuchem badań, to zliczana jest ilość obiektów należących do zbioru Z1, dla których są spełnione instrukcje badające łańcucha. Wynik liczenia jest pamiętany pod nazwą <n> i stanowi produkt do wykorzystania w innych instrukcjach. W przypadku gdy instrukcja COUNT występuje bez łańcucha badań, to służy do obliczania ilości elementów w zbiorze Z1.

Instrukcja EXISTS

Postać instrukcji:

EXISTS (w) n Z1 e1 @ e2
:
: (instrukcje łańcucha badań)

Wykonywany jest skok do etykiety e1, gdy co najmniej tyle obiektów zbioru Z1 spełnia warunkowe instrukcje łańcucha ile wynosi wartość wyrażenia <w>. W innym przypadku skok następuje do etykiety e2. Wyrażenie <w> wraz z zamykającymi je nawiasami może być pominięte. W takim przypadku przyjmuje się, że jego wartość jest równa 1.

Instrukcja SUM

Postać instrukcji:

SUM (w) n = Z1

lub

SUM (w) n = m1, m2, m3
:
: (instrukcje łańcucha badań

Pierwsza z dwóch instrukcji SUM jest wykonywana z indeksowaniem według zbioru. łańcuch badań w tym przypadku jest powtarzany ze zmienną <n> przyjmującą kolejne wartości indeksów obiektów ze zbioru Z1. Dla każdego obiektu ze zbioru Z1, spełniającego warunki łańcucha badań obliczana jest wartość wyrażenia <w>. Wartości obliczone są sumowane. Po zakończeniu wykonywania instrukcji SUM łączny wynik sumowania jest podstawiony w miejsce wartości, jaką miała zmienna <n>. Zmienna <n> może stanowić treść innych instrukcji.

Druga postać instrukcji przypomina swym działaniem instrukcję FOR. Zmienna <n> przybiera wartość pomiędzy m1 i m2 z przyrostem m3. Wartość wyrażenia <w> jest obliczana, dla każdej wartości indeksu a po zakończeniu wykonywania instrukcji zmienna <n> przybiera wartość równą sumie tych obliczonych wartości. Parametr m3 można pominąć, wtedy przyjmuje się, że posiada on wartość 1.

Źródło: Translator języka CSL-CROOK dla minikomputera MERA-400 w systemie operacyjnym CROOK-4, Instrukcja Programisty (wersja-17/2), Janusz Gocałek, Jacek Klauziński, Poznań, 1985