![]() CATEGORIES: BiologyChemistryConstructionCultureEcologyEconomyElectronicsFinanceGeographyHistoryInformaticsLawMathematicsMechanicsMedicineOtherPedagogyPhilosophyPhysicsPolicyPsychologySociologySportTourism |
Function-declarationsfunction-declaration = function-heading ';' directive ½ function-identification ';' function-block ½ function-heading ';' function-block . function-heading = 'function' identifier [ formal-parameter-list ] ':' result-type . function-identification = 'function' function-identifier . function-identifier = identifier . result-type = simple-type-identifier ½ pointer-type-identifier . function-block = block . The occurrence of a formal-parameter-list in a function-heading of a function-declaration shall define the formal-parameters of the function-block, if any, associated with the identifier of the function-heading to be those of the formal-parameter-list. The function-block shall contain at least one assignment-statement such that the function-identifier of the assignment-statement is associated with the block (see 6.8.2.2). The occurrence of an identifier in the function-heading of a function-declaration shall constitute its defining-point as a function-identifier associated with the result type denoted by the result-type for the region that is the block closest-containing the function-declaration. Each identifier having a defining-point as a function-identifier in the function-heading of a function-declaration in which the directive forward occurs shall have exactly one of its applied occurrences in a function-identification of a function-declaration, and this applied occurrence shall be closest-contained by the procedure-and-function-declaration-part closest-containing the function-heading. The occurrence of a function-block in a function-declaration shall associate the function-block with the identifier in the function-heading, or with the function-identifier in the function-identification, of the function-declaration; the block of the function-block shall be associated with the result type that is associated with the identifier or function-identifier. There shall be at most one function-block associated with a function-identifier.
Example of a procedure-and-function-declaration-part: function Sqrt (x : real) : real; {This function computes the square root of x (x > 0) using Newton's method.} var old, estimate : real; begin estimate := x; repeat old := estimate; estimate := (old + x / old) * 0.5; until abs(estimate - old) < eps * estimate; {eps being a global constant} Sqrt := estimate end {of Sqrt};
function max (a : vector) : real; {This function finds the largest component of the value of a.} var largestsofar : real; fence : indextype; begin largestsofar := a[1]; { Establishes largestsofar = max(a[1]) } for fence := 2 to limit do begin if largestsofar < a[fence] then largestsofar := a[fence] { Re-establishing largestsofar = max(a[1], ... ,a[fence]) } end; { So now largestsofar = max(a[1], ... ,a[limit]) } max := largestsofar end {of max};
function GCD (m, n : natural) : natural; begin if n=0 then GCD := m else GCD := GCD(n, m mod n); end;
{The following two functions analyze a parenthesized expression and convert it to an internal form. They are declared forward since they are mutually recursive, i.e., they call each other. These function-declarations use the following identifiers that are not defined in this International Standard: formula, IsOpenParenthesis, IsOperator, MakeFormula, nextsym, operation, ReadElement, ReadOperator, and SkipSymbol.}
function ReadExpression : formula; forward; function ReadOperand : formula; forward; function ReadExpression; {See forward declaration of heading.} var this : formula; op : operation; begin this := ReadOperand; while IsOperator(nextsym) do begin op := ReadOperator; this := MakeFormula(this, op, ReadOperand); end; ReadExpression := this end; function ReadOperand; {See forward declaration of heading.} begin if IsOpenParenthesis(nextsym) then begin SkipSymbol; ReadOperand := ReadExpression; {nextsym should be a close-parenthesis} SkipSymbol end else ReadOperand := ReadElement end;
Parameters
General The identifier-list in a value-parameter-specification shall be a list of value parameters. The identifier-list in a variable-parameter-specification shall be a list of variable parameters. formal-parameter-list = '(' formal-parameter-section { ';' formal-parameter-section } ')' . formal-parameter-section > value-parameter-specification ½ variable-parameter-specification ½ procedural-parameter-specification ½ functional-parameter-specification .
NOTE --- 1 There is also a syntax rule for formal-parameter-section in 6.6.3.7.1.
value-parameter-specification = identifier-list ': ' type-identifier . variable-parameter-specification = 'var' identifier-list ':' type-identifier . procedural-parameter-specification = procedure-heading . functional-parameter-specification = function-heading . An identifier defined to be a parameter-identifier for the region that is the formal-parameter-list of a procedure-heading shall be designated a formal-parameter of the block of the procedure-block, if any, associated with the identifier of the procedure-heading. An identifier defined to be a parameter-identifier for the region that is the formal-parameter-list of a function-heading shall be designated a formal-parameter of the block of the function-block, if any, associated with the identifier of the function-heading. The occurrence of an identifier in the identifier-list of a value-parameter-specification or a variable-parameter-specification shall constitute its defining-point as a parameter-identifier for the region that is the formal-parameter-list closest-containing it, and its defining-point as the associated variable-identifier for the region that is the block, if any, of which it is a formal-parameter. The occurrence of the identifier of a procedure-heading in a procedural-parameter-specification shall constitute its defining-point as a parameter-identifier for the region that is the formal-parameter-list closest-containing it, and its defining-point as the associated procedure-identifier for the region that is the block, if any, of which it is a formal-parameter. The occurrence of the identifier of a function-heading in a functional-parameter-specification shall constitute its defining-point as a parameter-identifier for the region that is the formal-parameter-list closest-containing it, and its defining-point as the associated function-identifier for the region that is the block, if any, of which it is a formal-parameter.
NOTE --- 2 If the formal-parameter-list is contained in a procedural-parameter-specification or a functional-parameter-specification, there is no corresponding procedure-block or function-block.
Value parameters The formal-parameter and its associated variable-identifier shall denote the same variable. The formal-parameter shall possess the type denoted by the type-identifier of the value-parameter-specification. The type possessed by the formal-parameter shall be one that is permitted as the component-type of a file-type (see 6.4.3.5). The actual-parameter (see 6.7.3 and 6.8.2.3) shall be an expression whose value is assignment-compatible with the type possessed by the formal-parameter. The current value of the expression shall be attributed upon activation of the block to the variable that is denoted by the formal-parameter.
Date: 2015-12-24; view: 972
|