Zoeken…


oproep / N predikaten

De call/N familie van predikaten kan tijdens de uitvoering willekeurige Prolog-doelen oproepen:

?- G=true, call(G).
true.

?- G=(true,false), call(G).
false.

Maplist / [2,3]

maplist/2 en maplist/3 zijn predikaten van hogere orde, waarmee de definitie van een predicaat over een enkel element naar lijsten van dergelijke elementen kan worden gebracht. Deze predikaten kunnen worden gedefinieerd met behulp van call/2 en call/3 als bouwstenen en worden geleverd met veel Prolog-systemen.

Bijvoorbeeld:

?- maplist(dif(a), [X,Y,Z]).
dif(X, a),
dif(Y, a),
dif(Z, a).

Meta-call

In Prolog is de zogenaamde meta-call een ingebouwde taalfunctie. Alle Prolog-code wordt vertegenwoordigd door Prolog- termen , waardoor doelen dynamisch kunnen worden geconstrueerd en als andere doelen kunnen worden gebruikt zonder extra predicaten:

?- Goal = dif(X, Y), Goal.
dif(X, Y).

Met behulp van dit mechanisme kunnen andere predicaten van hogere orde in Prolog zelf worden gedefinieerd.

foldl / 4

Een vouw (van links) is een hogere orde relatie tussen:

  • een predikaat met 3 argumenten
  • een lijst met elementen
  • een begintoestand
  • een eindtoestand, die het resultaat is van het toepassen van het predicaat op opeenvolgende elementen tijdens het doorlopen van tussenliggende toestanden.

Bijvoorbeeld: gebruik foldl/4 om de som van alle elementen in een lijst uit te drukken, gebruik een predikaat als bouwsteen om de som van twee elementen te definiëren:

?- foldl(plus, [2,3,4], 0, S).
S = 9.

Een lijst met doelen oproepen

Als u een lijst met doelen wilt oproepen alsof het een combinatie van doelen is, combineert u de predikaten call / 1 van hogere orde en maplist / 2:

?- Gs = [X = a, Y = b], maplist(call, Gs).
Gs = [a=a, b=b],
X = a,
Y = b.


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow