• Nie Znaleziono Wyników

Przykłady u˙zycia AQL

W dokumencie Index of /rozprawy2/11702 (Stron 96-100)

7.2 Alvis Query Language

7.2.3 Przykłady u˙zycia AQL

Aby pozwoli´c dokładnie zrozumie´c jak wykorzysta´c zaimplementowane funkcje AQL, w serii listingów poni˙zej przedstawiono ich deklaracje wraz z opisami parametrów i przykładami u˙zycia.

Listing 7.3: Funkcje terminalStates i terminalStatesCount

-- | Deklaracje

terminalStates :: [Node]

terminalStatesCount :: Int

--- | Przykłady u˙zycia

-- Zwró´c list˛e wszystkich stanów terminalnych:

terminalStates

-- Zwró´c liczb˛e wszystkich stanów terminalnych:

terminalStatesCount

Listing 7.4: Funkcje pcEq i pcEqCount

-- | Deklaracje

pcEq :: Agent -> Int -> [Node]

pcEqCount :: Agent -> Int -> Int

--- | Przykłady u˙zycia

-- Zwró´c list˛e stanów w których licznik rozkazów agenta A ma warto´s´c 2

pcEq A 2

7.2. Alvis Query Language 87

Tablica 7.1: Zestawienie zaimplementowanych funkcji Alvis Query Language.

Funkcja Opis

(1)terminalStates (2)terminalStatesCount

Zwraca odpowiednio list˛e (1) lub liczb˛e (2) wszystkich stanów terminalnych.

(3)pcEq <Agent> <value>

(4)pcEqCount <Agent> <value>

Zwraca odpowiednio list˛e (3) lub liczb˛e (4) stanów dla których licznik rozkazów danego agenta (<Agent>) wynosi<value>. (5)amEq <Agent> <Mode>

(6)amEqCount <Agent> <Mode>

Zwraca odpowiednio list˛e (5) lub liczb˛e (6) stanów dla których dany agent (<Agent>) jest w trybie<Mode>

(7)pv<X>Match <pattern>

(8)pv<X>MatchCount <pattern>

Zwraca odpowiednio list˛e (7) lub liczb˛e (8) stanów dla których krotka parametrów (przechowuj ˛aca warto´sci zmiennych) agenta o numerze <X>pasuje do zadanego wzorca (<pattern>). We wzorcu mo˙zna wykorzysta´c funkcj˛eblank, która zast˛epuje do-woln ˛a warto´s´c.

(9)pv<X>_<Y>_nodes <formula>

(10)pv<X>_<Y>_count <formula>

Zwraca odpowiednio list˛e (9) lub liczb˛e (10) stanów w których parametr na miejscu<Y>w krotce parametrów agenta o numerze

<X>spełnia zadan ˛a funkcj˛e logiczn ˛a (<formula>).

(11)isPv<X>_<Y> <formula> Zwraca warto´s´cTrueje˙zeli istniej ˛a stany w których parametr na miejscu<Y>w krotce parametrów agenta o numerze<X>spełnia zadan ˛a funkcj˛e logiczn ˛a (<formula>).

(12)isReachable <st> <dst> Zwraca warto´s´c True je˙zeli istnieje ´scie˙zka pomi˛edzy <st> i

<dst>.

(13)allPathsReach <st> <dst> Zwraca warto´s´cTrueje˙zeli nie istniej ˛a ´scie˙zki rozpoczynaj ˛ace si˛e w<st>na których nigdy nie osi ˛agniemy stanu<dst>. (14)minPath <st> <dst>

(15)minPathLen <st> <dst>

Zwraca odpowiednio ´slad (14) lub długo´s´c (15) najkrótszej ´scie˙zki mi˛edzy <st> i <dst>. Je˙zeli taka ´scie˙zka nie ist-nieje to zwrócona zostanie odpowiednio pusta lista lub warto´s´c Infinity.

(16)maxPath <st> <dst>

(17)maxPathLen <st> <dst>

Zwraca odpowiednio ´slad (16) lub długo´s´c (17) najdłu˙zszej ´scie˙zki mi˛edzy <st> i <dst>. Je˙zeli taka ´scie˙zka nie istnieje (tzn. istnieje przynajmniej jedna ´scie˙zka na której nigdy nie osi ˛a-gniemy<dst>lub napotkany zostanie cykl) to zwrócona zosta-nie odpowiednio pusta lista lub warto´s´cInfinity.

7.2. Alvis Query Language 88

-- Zwró´c liczb˛e stanów w których licznik rozkazów agenta B ma warto´s´c 3

pcEqCount B 3

Listing 7.5: Funkcje amEq i amEqCount

-- | Deklaracje

amEq :: Agent -> Mode -> [Node]

amEqCount :: Agent -> Mode -> Int

--- | Przykłady u˙zycia

-- Zwró´c list˛e stanów w których agent A jest w trybie Running (X)

amEq A X

-- Zwró´c liczb˛e stanów w których agent B jest w trybie Finished (F)

amEqCount B F

Listing 7.6: Funkcje pv<X>Match i pv<X>MatchCount wraz z pomocnicz ˛a funkcj ˛a blank

-- | Deklaracje wygenerowane dla agenta o numerze 1

-- | posiadaj ˛acego jeden parametr typu Int i jeden typu Bool

pv1Match :: ((Int->Bool),(Bool->Bool)) -> [Node]

pv1MatchCount :: ((Int->Bool),(Bool->Bool)) -> Int

--| Deklaracja pomocniczej funkcji blank, pasuj ˛acej do dowolnego wzorca

blank :: a -> Bool

--- | Przykłady u˙zycia

-- Zwró´c list˛e stanów w których drugi parametr agenta o numerze 1 (<X>)

-- jest równy False

pv1Match (blank,(==False))

-- Zwró´c list˛e stanów w których pierwszy parametr agenta o numerze 1 (<X>)

-- jest wi˛ekszy od 3

pv1Match ((>3),blank)

-- Zwró´c liczb˛e stanów w których pierwszy parametr agenta o numerze 1 (<X>)

-- jest równy 0, a drugi parametr jest równy True

pv1MatchCount ((==0),(==True))

Listing 7.7: Funkcje pv<X>_<Y>_nodes i pv<X>_<Y>_count

-- | Deklaracje wygenerowane dla agenta o numerze 2 (<X>) -- | którego pierwszy (<Y>) parametr jest typu Int

pv2_1_nodes :: (Int->Bool) -> [Node]

pv2_1_count :: (Int->Bool) -> Int

7.2. Alvis Query Language 89

--- | Przykłady u˙zycia

-- Zwró´c list˛e stanów w których pierwszy parametr agenta o numerze 2

-- jest mniejszy od 5

pv2_1_nodes (<5)

-- Zwró´c liczb˛e stanów w których pierwszy parametr agenta o numerze 2

-- jest równy 3

pv2_1_count (==3)

Listing 7.8: Funkcja isPv<X>_<Y>

-- | Deklaracja wygenerowana dla agenta o numerze 3 (<X>) -- | którego drugi (<Y>) parametr jest typu Int

isPv3_2 :: (Int->Bool) -> Bool

--- | Przykłady u˙zycia

-- Czy istniej ˛a stany w których drugi parametr agenta o numerze 3

-- jest równy 1?

isPv3_2 (==1)

-- Czy istniej ˛a stany w których drugi parametr agenta o numerze 3

-- jest mniejszy od 0 lub równy 6?

isPv3_2 (<0) || isPv3_2 (==6)

Listing 7.9: Funkcja isReachable

-- | Deklaracja

isReachable :: Int -> Int -> Bool

--- | Przykłady u˙zycia

-- Czy istnieje ´scie˙zka ze stanu pocz ˛atkowego do stanu o numerze 5?

isReachable 0 5

-- Czy istnieje ´scie˙zka ze stanu o numerze 5

-- do stanu o numerze 34 lub do stanu o numerze 98?

isReachable 5 34 || isReachable 5 98

Listing 7.10: Funkcja allPathsReach

-- | Deklaracja

allPathsReach :: Int -> Int -> Bool

--- | Przykład u˙zycia

7.2. Alvis Query Language 90

-- doprowadz ˛a kiedy´s do stanu o numerze 5?

allPathsReach 4 5

Listing 7.11: Funkcje minPath i minPathLen

-- | Deklaracje

minPath :: Int -> Int -> [NodeNo]

minPathLen :: Int -> Int -> Float

--- | Przykłady u˙zycia

-- Jaki jest najkrótszy czas przej´scia ze stanu 4 do stanu 59?

minPathLen 4 59

-- Przez jakie stany przebiega najkrótsza ´scie˙zka pomi˛edzy stanami 4 a 59?

minPath 4 59

Listing 7.12: Funkcje maxPath i maxPathLen

-- | Deklaracje

maxPath :: Int -> Int -> [NodeNo]

maxPathLen :: Int -> Int -> Float

--- | Przykłady u˙zycia

-- Jaki jest najdłu˙zszy czas przej´scia ze stanu 2 do stanu 28?

maxPathLen 2 28

-- Przez jakie stany przebiega najdłu˙zsza ´scie˙zka pomi˛edzy stanami 2 a 28?

maxPath 2 28

W dokumencie Index of /rozprawy2/11702 (Stron 96-100)

Powiązane dokumenty