CSL-CROOK - Instrukcja SPLIT
Instrukcja SPLIT na podstawie, której dokonuje się podziału elementów między zbiory w/g różnych kryteriów, ma kilka postaci. Używa się jej w formie zasadniczej (pełnej) i skróconej, z towarzyszącym zespołem warunków lub bez a nawet w bardziej złożonej konfiguracji. W połączeniu z innymi instrukcjami. Cechą charakterystyczną wszystkich form wykorzystania tej instrukcji jest brak instrukcji postaci adresowej. Program jest kontynuowany zawsze od następnej instrukcji po SPLIT.
Zasadnicza postać instrukcji jest następująca:
- SPLIT i z1 INTO z2 ELSE z3
- :
- : (łańcuchy badań)
Gdzie:
- i - zmienna typy INTEGER
- z1, z2, z3 - nazwy zbiorów, które zadeklarowano jako należące do tej samej klasy.
Działanie instrukcji rozpoczyna się opróżnieniem (zerowaniem) zbiorów z1 i z2. Następnie kontrolowany jest zespół warunków dotyczący każdego elementu zbioru z1. Zmienna i przybiera przy każdej kontroli zespołu warunków wartość indeksu kolejnego elementu zbioru a1. Jeżeli zbiór warunków jest spełniony, element zostaje umieszczony w zbiorze Z2, jeżeli zaś, którykolwiek z warunków nie jest spełniony, element umieszczony zostaje w Z3. W ciągu całego procesu wykonywania instrukcji zawartość zbioru z1 nie ulega zmianie. Instrukcja ta wymaga zawsze podania co najmniej jednego warunku, który zawiera również zmienna <i>, bowiem w przeciwnym przypadku instrukcja ta traci sens.
W skróconej formie instrukcja SPLIT może występować w dwóch postaciach:
- SPLIT i Z1 INTO Z2
- :
- : (łańcuchy badań)
lub
- SPLIT i Z1 ELSE Z2
- :
- : (łańcuchy badań)
W rezultacie działania pierwszej wersji instrukcji SPLIT, do zbioru Z2 zostaną przeniesione te elementy zbioru Z1, dla których zespół warunków jest spełniony.
Druga wersja skróconej instrukcji SPLIT działa w sposób odwrotny tj., powoduje umieszczenie w zbiorze Z2 tych elementów zbioru Z1, dla których łańcuchy badań nie są spełnione.
Instrukcję SPLIT można również używać w połączeniu z zastrzeżonymi słowami HEAD lub TAIL.
Ogólna postać instrukcji jest w tym układzie następująca:
- SPLIT i Z1 INTO HEAD Z2 ELSE HEAD Z3
- TAIL TAIL
- :
- : (łańcuchy badań)
W tej postaci zbiory Z1, Z2 nie są zerowane, jak to ma miejsce w innych wersjach wykorzystania instrukcji. Jeżeli łańcuchy badań są spełnione, wówczas dany element klasy należący do zbioru Z1 zostaje dołączony na początek zbioru Z2. Dzieje się tak w przypadku użycia słowa HEAD. Natomiast dany element zostaje dodany za elementami znajdującymi się już w zbiorze Z2, jeśli użyjemy słowa TAIL.
Słowo ELSE oznacza alternatywne działanie instrukcji, która powoduje umieszczenie danego elementu w zbiorze Z3 (na początku zbioru jeżeli użyjemy słowa HEAD lub na końcu zbioru jeżeli użyjemy słowa TAIL), jeżeli łańcuch badań nie jest spełniony.
Słowa INTO i ELSE mogą być w instrukcji SPLIT dodatkowo uzupełnione słowami HEAD lub TAIL. Dopuszczalne są więc następujące formy użycia instrukcji:
- SPLIT .... INTO HEAD .... ELSE TAIL ...
- SPLIT .... INTO HEAD .... ELSE
- SPLIT .... INTO ......... ELSE HEAD ....
- SPLIT .... INTO HEAD ....
- SPLIT .... ELSE TAIL ....
Specjalne możliwości w symulacji daje instrukcja SPLIT połączona ze słowem strukturalnym języka QUALIFY. Słowa tego używa się w instrukcji SPLIT w celu zignorowania przy badaniu łańcuchów badań określonych elementów klasy. Słowo QUALITY może występować wyłącznie w zespole warunków instrukcji SPLIT i musi być umieszczone bezpośrednio po SPLIT.
Ogólna postać tej wersji instrukcji SPLIT jest następująca:
- SPLIT .... Z1 .... Z2 .... Z3
- QUALIFY
- .... (łańcuchy badań dla QUALIFY)
- ....
- .... (łańcuchy badań dla SPLIT)
- ....
Każdy element zbioru Z1 zostaje sprawdzony na podstawie łańcuchów badań objętych słowem QUALIFY zanim zostanie umieszczony w zbiorze Z2 lub Z3, zgodnie z kryteriami instrukcji SPLIT.
Instrukcja RANK
Instrukcja ta ma następującą postać:
- RANK i <zbiór> (<wyrażenie>)
Dla każdego elementu zbioru zmienna przyjmuje wartość indeksu obiektu i następuje obliczenie obliczenie wyrażenia. Obiekty należące do zbioru zostaną ustawione w taki sposób, że odpowiadające im wartości wyrażenia zostają uporządkowane w porządku malejącym. Ten obiekt, dla którego wartość wyrażenia przyjmuje największą wartość, staje się pierwszym elementem zbioru. Instrukcja RANK występuje łańcucha badań. Dla zbiorów boolowskich instrukcja ta jest ignorowana.
Ź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