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