Google
 
   
Login
Username:

Password:


Lost Password?

Register now!
Search
Main Menu
top books
Polls
What do you think about php-deluxe.net?
Excellent!
Cool
Hmm..not bad
What the hell is this?
encyclopedia
recommendation
compare webbrowser
Freenet DSL
Who's Online
5 user(s) are online (5 user(s) are browsing encyclopedia)

Members: 0
Guests: 5

more...
browser tip
recommendation!
Sponsored
partner
Germany Next Topmodel
germanys next topmodel germanys next topmodel

Guard (computing)

In computer programming, a guard is a Boolean datatype expression (programming) that must evaluate to true if the program execution is to continue in the branch in question. The term is used at least in Haskell programming language and Clean programming language programming languages. In Mathematica, guards are called constraints . Guards are the fundamental concept in Guarded commands, a language in Formal methods. Guards can be used to augment pattern matching with the possibility to skip a pattern even if the structure matches. Boolean expressions in conditional statements usually also fit this definition of a guard although they are called conditions .

In the following Haskell example, the guards occur between each pair of | and = :

f x | x > 0 = 1 | otherwise = 0

This is similar to the respective mathematic notation:

f(x) = left{ egin{matrix} 1 & mbox{if } x>0 \ 0 & mbox{otherwise} end{matrix} ight.

In this case the guards are in the if and otherwise clauses.

If there are several parallel guards, such as in the example above, they are normally tried in a top to bottom order and the branch of the first to pass is chosen. Guards in a list of cases are typically parallel.

However, in Haskell list comprehensions the guards are in series, and if any of them fails, the list element is not produced. This would be the same as combining the separate guards with logical conjunction, except that there can be other list comprehension clauses among the guards.

= Evolution =

A simple conditional expression, already present in CPL programming language in 1963, has a guard on first sub-expression, and another sub-expression to use in case the first one cannot be used. Some common ways to write this: (x>0) -> 1/x; 0 x>0 1/x : 0

If the second sub-expression can be a further simple conditional expression, we can give more alternatives to try before the last fall-through : (x>0) -> 1/x; (x -1/x; 0

Already ISWIM in 1966 had a form of conditional expression without an obligatory fall-through case, thus separating guard from the concept of choosing either-or. In the case of ISWIM, if none of the alternatives could be used, the value was to be undefined , which was defined to never compute into a value.

SASL programming language (1976) was one of the first programming languages to use the term guard. In the language, functions could have several definitions and the one to apply was chosen based on the guards that followed each definition: fac n = 1, n = 0 = n * fac (n-1), n > 0

= Pattern guard =

In addition to a guard attached to a pattern, pattern guard can refer to the use of pattern matching in context of a guard. In effect, a match of the pattern is taken to mean pass. This meaning was introduced by a proposal for Haskell by Simon Peyton Jones titled [http://research.microsoft.com/Users/simonpj/Haskell/guards.html A new view of guards] in April 1997 and has been further used about the implementation of the proposal. The feature provides the possibility to use patterns in the guards of a pattern.

An example in the extended Haskell: clunky env var1 var2 | Just val1