Examples |
|
3-way if statement |
|
This example introduces a new statement: The 3-way if-statement. In a 3-way if-statement two values are compared and depending on the outcome one of 3 code blocks, corresponding to less than, equal and greater than, is executed. An example using the 3-way if statement is:
if yourAge cmp myAge is lt: writeln("You are yonger than me"); eq: writeln("We have the same age"); gt: writeln("You are older than me"); end if;
The syntax of this statement can be defined with the Seed7 Structured Syntax Description (S7SSD):
$ syntax expr: .if.().cmp.().is. lt. : .(). eq. : .(). gt. : .(). end.if is -> 25;
The semantic of this statement can be defined with:
const proc: if (in integer: a) cmp (in integer: b) is lt: (in proc: ltPart) eq: (in proc: eqPart) gt: (in proc: gtPart) end if is func begin if a < b then ltPart; elsif a = b then eqPart; else gtPart; end if; end func;
The type proc determines that 'ltPart', 'eqPart' and 'gtPart' are call-by-name parameters. Contrary to normal parameters a call-by-name parameter is not evaluated, when the function is called. Instead the function decides, if a call-by-name parameter is evaluated. So the lt, eq and gt parts of a 3-way if-statement are not evaluated, when it is called. Instead the 3-way if-statement decides, if 'ltPart', 'eqPart' or 'gtPart' should be evaluated.
|
|