Protecția ( expresie de gardă , expresie de gardă ) este o expresie logică care are scopul de a limita procesele de calcul și de a selecta o opțiune de calcul. Utilizat de obicei în limbaje de programare funcționale (de ex . Haskell , Erlang ) [1] .
Toate expresiile ulterioare de gardă sunt în limbaj funcțional Haskell , care utilizează această tehnologie foarte des. Toate astfel de expresii sunt evidențiate cu caractere aldine în coduri .
Funcția divisors returnează o listă de divizori ai numărului dat n. A doua linie a definiției arată o gardă care restricționează alegerea unui element din lista de divizori xdoar la o astfel de valoare care împarte parametrul original nfără rest.
divizori n = [x | x <- [1..(n - 1)], n `mod` x == 0 ]Funcția signreturnează semnul numărului dat x. Expresiile de gardă sunt scrise după simboluri ( |). Ele vă permit să alegeți una sau alta alternativă atunci când calculați semnul unui număr. Acest mod de stocare este adesea folosit în locul mecanismului de potrivire a modelului atunci când nu există nicio modalitate de a descrie în mod explicit modelul în funcție (de exemplu, dacă funcția este o funcție de aplicație generică pentru procesarea valorilor de un anumit tip care este o instanță ). de vreo clasă).
semnul x | x < 0 = -1 | x == 0 = 0 | x > 0 = 1Paza permite, în cazul unei expresii de potrivire nevalidă, trecerea la următoarea. Dacă exemplul anterior este formatat ca un operator de potrivire a modelului, atunci x = 0prima potrivire ( x < 0) va cauza o eroare, al cărei handler va opri încercările ulterioare de potrivire. În plus, pentru cazul în care toate expresiile nu sunt adevărate, este convenabil să surprindeți astfel de situații prin setarea valorii de adevăr imediat True. Pentru lizibilitate, biblioteca standard Prelude oferă o constantă de altfel, care arată și mai mult ca un comutator în limbajele algoritmice.