| or(3scm) | Scheme Programmer's Manual | or(3scm) |
NAME
or - short-circuiting conditional, return the first true valueLIBRARY
(import (rnrs)) ;R6RS (import (rnrs base)) ;R6RS (import (scheme r5rs)) ;R7RS (import (scheme base)) ;R7RS
SYNOPSIS
(or test ...)
DESCRIPTION
The test expressions are evaluated from left to right until one returns a true value or the last test is reached. In the former case, the or expression returns the value without evaluating the remaining expressions. In the latter case, the last expression is evaluated and its values are returned.If there are no tests, #f is returned.
IMPLEMENTATION NOTES
- Chez Scheme, Loko Scheme
- The source-level optimizer can rewrite code that uses multiple values in one of the test expressions in such a way that the values are no longer in a single-value context. This can mean that code which would otherwise raise an exception will run without error, but with possibly unexpected results. This is not a bug and is permitted by R6RS.
- Vicare Scheme
- The test expressions are statically checked to see that they return a single value.
RETURN VALUES
Returns the value of the first true expression. In Scheme everything is true except for the false value (#f or #false in R7RS).The last test expression is in tail context if the or expression itself is.
EXAMPLES
(or (= 2 2) (> 2 1)) => #t (or (= 2 2) (< 2 1)) => #t (or #f #f #f) => #f (or '(b c) (/ 3 0)) => (b c) (or) => #f
APPLICATION USAGE
The or syntax is very common in almost all programming languages. It is sometimes called or and other times && or something else. It is used when several expressions should be tested but evaluation should not continue past the first true value.When expressions are more complicated it is better to use cond(3scm).
COMPATIBILITY
The or syntax is widely compatible across Lisp systems.ERRORS
This syntax can raise exceptions with the following condition types:- &assertion (R6RS)
- Zero or more than one value was returned by a non-tail test expression. Implementations may also handle this in another way, as long as the safety guarantees of R6RS § 5.6 are upheld.
- R7RS
- The assertions described above are errors. Implementations may signal an error, extend the procedure's domain of definition to include such arguments, or fail catastrophically.
SEE ALSO
and(3scm), cond(3scm), if(3scm)STANDARDS
R4RS, IEEE Scheme, R5RS, R6RS, R7RSHISTORY
Short-circuiting evaluation was invented in the 1950s by John McCarthy, the creator of Lisp.AUTHORS
This page is part of the scheme-manpages project. It includes materials from the RnRS documents. More information can be found at https://weinholt.se/scheme/manpages/.| 2020-05-03 |