Zahn's construct
Zahn's construct, in computer science, was a proposed structure for structured control flow in computer programming languages first described by Charles T. Zahn in 1974.[1] The construct is primarily described in terms of an extension to looping constructs to recognize multiple means by which a loop could terminate. For example, a search loop might terminate early, when the target is found; or it might terminate after the search has been completed unsuccessfully. Zahn's construct can be used to avoid GO TO
statements when determining which case was encountered. Zahn does this by introducing a new kind of variable called a situation indicator in a CASE-like construct following the loop.
Donald Knuth, in his paper "Structured Programming with Go To Statements",[2] describes two forms of Zahn's construct as follows:
loop until <situation 1> or ... or <situation n>: <statement list 0> repeat; then <situation 1> => <statement list 1>; ... <situation n> => <statement list n>; fi
and:
begin until <situation 1> or ... or <situation n>: <statement list 0>; end; then <situation 1> => <statement list 1>; ... <situation n> => <statement list n>; fi
There must also be a statement to set a specific situation indicator and exit the body of the construct.
The following simple example involves searching a two-dimensional table for a particular item.
exitwhen found or missing; for I := 1 to N do for J := 1 to M do if table[I,J] = target then found; missing; exits found: print ("item is in table"); missing: print ("item is not in table"); endexit;
References
- ^ Zahn, C. T. "A control statement for natural top-down structured programming" presented at Symposium on Programming Languages, Paris, 1974.
- ^ Knuth, D. E. "Structured Programming with Go To Statements" Archived 2013-10-23 at the Wayback Machine, Computing Surveys, Volume 6, December 1974, page 275
External links
- Zahn, C. T. Structured Control in Programming Languages SLACPub-1530, January 1975
- Control structures defined using Scheme; Zahn's construct is the last one in the list
- Zahn's construct defined using GOTOs in Forth