Sök…


call / N predicates

call/N familjen med predikat kan ringa godtyckliga Prolog-mål vid körning:

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

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

maplist / [2,3]

maplist/2 och maplist/3 är predikat med högre ordning, som gör det möjligt att lyfta definitionen av ett predikat om ett enda element till listor över sådana element. Dessa predikat kan definieras med användning av call/2 och call/3 som byggstenar och skickas med många Prolog-system.

Till exempel:

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

Meta-call

I Prolog är det så kallade metaanropet en inbyggd språkfunktion. All Prolog-kod representeras av Prolog- termer , vilket gör att mål kan konstrueras dynamiskt och användas som andra mål utan ytterligare predikat:

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

Med hjälp av denna mekanism kan andra predikat med högre ordning definieras i Prolog själv.

foldl / 4

En vikning (från vänster) är en högre ordning mellan:

  • ett predikat med 3 argument
  • en lista över element
  • ett initialt tillstånd
  • ett slutligt tillstånd, vilket är resultatet av att applicera predikatet på successiva element under genomförande av mellanliggande tillstånd.

Exempel: Använd foldl/4 att uttrycka summan av alla element i en lista med ett predikat som ett byggsten för att definiera summan av två element:

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

Ring en lista med mål

Om du vill ringa en lista med mål som om det var en kombination av mål, kombinerar de högre ordning predikaten samtal / 1 och kartlista / 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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow