-
some Vars DCG-goal
-
Egy DCG egzisztenciális kvantifikáció. Vars változók listája. DCG-goal-nak érvényes DCG-célnak kell lennie.
Szemantikája:
transform(V_in, V_out, some Vars DCG_goal) =
some Vars transform(V_in, V_out, DCG_goal)
-
all Vars DCG-goal
-
Egy DCG univerzális kvantifikáció. Vars változók listája. DCG-goal-nak érvényes DCG-célnak kell lennie.
Szemantikája:
transform(V_in, V_out, all Vars DCG_goal) = all Vars transform(V_in, V_out, DCG_goal)
-
DCG-goal1, DCG-goal2
-
DCG szekvencia. Intuitívan ez annyit jelent, hogy "elemezd DCG-goal1-et, aztán DCG-goal2-t", vagy "hajtsd végre DCG-goal1-et, aztán DCG-goal2-t". (Vegyük észre, hogy az egyetlen mód, hogy ez a konstrukció valójában kikényszerítse a kívánt szekventációt, az az implicit DCG-argumentumot módjainak kihasználása.) DCG-goal1-nak és DCG-goal2-nek érvényes DCG-célnak kell lennie.
Szemantikája:
transform(V_in, V_out, (DCG-goal1, DCG-goal2)) = (transform(V_in, V_new, DCG_goal1), transform(V_new, V_out, DCG_goal2))
ahol V_new egy friss változó.
-
DCG-goal1 ; DCG-goal2
-
Diszjunkció. DCG-goal1 és DCG-goal2 érvényes célok. DCG-goal1 formája nem lehet
DCG-goal1a -> DCG-goal1b
. (Ha az lenne, akkor a cél egy if-then-else, nem diszjunkció.)
Szemantikája:
transform(V_in, V_out, (DCG_goal1 ; DCG_goal2)) = ( transform(V_in, V_out, DCG_goal1) ; transform(V_in, V_out, DCG_goal2) )
-
{ Goal }
-
Kapcsos zárójelek közötti szokványos cél. Goal-nak érvényes célnak kell lennie.
Szemantikája:
transform(V_in, V_out, { Goal }) = (Goal, V_out = V_in)
-
[Term, ...]
-
DCG input illesztés. Egyesíti a V_in implicit DCG input változót, aminek
list(_)
típusúnak kell lennie, egy olyan listával, melynek kezdeti elemei a megadott termek, és aminek a vége a V_out implicit DCG out változó. A termeknek érvényes adat-termeknek kell lenniük.
Szemantikája:
transform(V_in, V_out, [Term1, ...]) = (V_in = [Term, ... | V_Out])
-
[]
-
Null DCG cél (egy üres DCG input illesztés). Ekvivalens
{ true }
-val.
Szemantikája:
transform(V_in, V_out, []) = (V_out = V_in)
-
not DCG-goal
-
\+ DCG-goal
-
DCG negáció. A két különböző szintaxisnak ugyanaz a szemantikája. Goal-nak érvényes célnak kell lennie.
Szemantikája:
transform(V_in, V_out, not DCG_goal) = (not transform(V_in, V_new, DCG_goal), V_out = V_in)
ahol V_new egy friss változó.
-
if CondGoal then ThenGoalelse ElseGoal
-
CondGoal -> ThenGoal; ElseGoal
-
DCG if-then-else. A két különböző szintaxis szemantikája megegyezik. CondGoal-nak, ThenGoal-nak és ElseGoal-nak érvényes DCG-célnak kell lennie.
Szemantikája:
transform(V_in, V_out, if CondGoal then ThenGoal else ElseGoal) =
if transform(V_in, V_cond, CondGoal) then
transform(V_cond, V_out, ThenGoal)
else
transform(V_in, V_out, ElseGoal)
-
=(Term)
-
DCG egyesítés. Egyesíti Term-et az implicit DCG argumentummal. Term-nek érvényes adat-termnek kell lennie.
Szemantikája:
transform(V_in, V_out, =(Term)) = (Term = V_in, V_out = V_in)
-
:=(Term)
-
DCG kimeneti egyesítés. Egyesíti Term-et az implicit DCG kimeneti argumentummal, a bemeneti DCG argumentumot figyelmen kívül hagyja. Term-nek érvényes adat-termnek kell lennie.
Szemantikája:
transform(V_in, V_out, :=(Term)) = (V_out = Term)
-
Term =^ field_list
-
Egy DCG mező kiválasztás. Egyesíti a Term kifejezést azzal az eredménnyel, melyet úgy kap, hogy az implicit DCG argumentumra alkalmazza a field_list mező kiválasztást. Term-nek érvényes adat-termnek kell lennie. field_list-nek érvényes mezőlistának kell lenniet. Lásd Rekord szintaxis.
Szemantikája:
transform(V_in, V_out, Term =^ field_list) = (Term = V_in ^ field_list, V_out = V_in)
-
^ field_list := Term
-
Egy DCG mező módosítás. Helyettesít egy mezőt az implicit DCG argumentumban. Term-nek érvényes adat-termnek kell lennie. field_list-nek érvényes mezőlistának kell lennie. Lásd Rekord szintaxis.
Szemantikája:
transform(V_in, V_out, ^ field_list := Term) = (V_out = V_in ^ field_list := Term)
-
DCG-call
-
Minden olyan term, melynek formája nem egyezik meg egyetlen fenti kifejezés formájával sem, egy DCG predikátum hívásnak kell lennie. Ha a term egy Var változó, akkor úgy kezeljük, mintha helyette
call(Var)
állna. Legvégül két implicit DCG argumentumot fűzünk a megadott argumentumokhoz.
Szemantikája:
transform(V_in, V_out, p(A1, ..., AN)) = p(A1, ..., AN, V_in, V_out)