Sök…


Namngivning

När vi programmerar i Prolog måste vi välja två sorters namn:

  • namn på predikat
  • namn på variabler .

Ett bra predikatnamn gör klart vad varje argument betyder. Enligt konvention används understreck i namn för att separera beskrivningen av olika argument. Detta beror på att underscores_keep_even_longer_names_readable , medan mixingTheCasesDoesNotDoThisToTheSameExtent .

Exempel på bra predikatnamn är:

  • parent_child/2
  • person_likes/2
  • route_to/2

Observera att beskrivande namn används. Imperativ undviks. Det är tillrådligt att använda beskrivande namn eftersom Prolog-predikat vanligtvis kan användas i flera riktningar, och namnet bör vara tillämpligt också för alla eller inget av argumenten instanseras.

Blandad bokstäver är vanligare när du väljer variablenamn . Till exempel: BestSolutions , MinElement , GreatestDivisor . En vanlig konvention för att namnge variabler som anger successiva tillstånd använder S0 , S1 , S2 , ..., S , där S representerar det slutliga tillståndet.

Indrag

Det finns bara ett fåtal språkkonstruktioner i Prolog, och flera sätt att fördriva dem är vanliga.

Oavsett vilken stil som väljs, är en princip som alltid ska följas att aldrig placera (;)/2 i slutet av en rad. Detta beror på ; och , ser mycket lika, och , ofta inträffar vid slutet av en rad. Därför bör klausuler som använder en skillnad till exempel skrivas som:

(  Goal1
;  Goal2 
)

Argumentordning

Helst kan Prolog-predikat användas i alla riktningar. För många rena predikat är detta faktiskt också fallet. Vissa predikat fungerar dock bara i särskilda lägen , vilket innebär inställningsmönster för deras argument.

I regel är den vanligaste argumentordningen för sådana predikat:

  • inmatningsargument placeras först. Dessa argument måste instanseras innan predikatet anropas.
  • par argument som hör samman placeras intilliggande, till exempel p(..., State0, State, ...)
  • avsedda utgångsargument placeras senast. Dessa predikat inställs av predikatet.


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow