Procedure-declarations

(315,040)<#4612#> (000,030)<#4352#>procedure-declaration<#4352#> 42 (000,010)<#4353#>(1,0)<#3029#>020<#3029#><#4733#>#tex2html_wrap6111#(070,010)<#4734#>procedure-head<#4734#><#4733#> (1,0)<#3032#>020<#3032#><#4736#>#tex2html_wrap6115#(070,010)<#4737#>procedure-body<#4737#><#4736#> (1,0)<#3035#>020<#3035#><#4739#>#tex2html_wrap6119#(070,010)<#4740#>procedure-tail<#4740#><#4739#> (1,0)<#3038#>020<#3038#><#4353#> 43 <#4612#>

(315,110)<#4613#> (000,100)<#4354#>procedure-head<#4354#> 44 (000,080)<#4355#>(1,0)<#3040#>030<#3040#><#4742#>#tex2html_wrap6129#(060,010)<#4743#>type-declarer<#4743#><#4742#> (1,0)<#3043#>030<#3043#> <#4749#>(040,010)<#4752#>PROC<#4752#><#4749#> (040,010) (1,0)<#3046#>005<#3046#><#4355#> 45 (005,070)<#3047#>(20,20)[rt]<#3047#> (025,070)<#3048#>(20,20)[lb]<#3048#> (025,060)<#4356#>(1,0)<#3049#>70<#3049#><#4356#> (095,070)<#3050#>(20,20)[rb]<#3050#> (115,070)<#3051#>(20,20)[lt]<#3051#> 46 (165,070)<#3052#>(20,20)[rt]<#3052#> (175,070)<#4357#>(0,-1)<#3053#>020<#3053#><#4357#> (165,050)<#3054#>(20,20)[rb]<#3054#> (165,040)<#4358#>(-1,0)<#3055#>140<#3055#><#4358#> (025,030)<#3056#>(20,20)[l]<#3056#> 47 (025,020)<#4359#>(1,0)<#3057#>005<#3057#><#4754#>#tex2html_wrap6139#(070,010)<#4755#>procedure-name<#4755#><#4754#> (1,0)<#3060#>030<#3060#><#4757#>#tex2html_wrap6143#(100,010)<#4758#>formal-parameters-pack<#4758#><#4757#> (1,0)<#3063#>030<#3063#> <#4764#>(010,010)<#4767#>:<#4767#><#4764#> (010,010) (1,0)<#3066#>030<#3066#><#4359#> 48 (105,010)<#3067#>(20,20)[rt]<#3067#> (125,010)<#3068#>(20,20)[lb]<#3068#> (125,000)<#4360#>(1,0)<#3069#>110<#3069#><#4360#> (235,010)<#3070#>(20,20)[rb]<#3070#> (255,010)<#3071#>(20,20)[lt]<#3071#> 49 <#4613#>

The head gives the <#3072#>procedure-name<#3072#>, the types and access attributes of its parameters (if any) and the type of its result (if any).

(315,160)<#4614#> (000,150)<#4361#>formal-parameters-pack<#4361#> 50 (000,130)<#4362#>(1,0)<#3074#>030<#3074#> <#4773#>(010,010)<#4776#>(<#4776#><#4773#> (010,010) (1,0)<#3077#>005<#3077#><#4362#> (045,120)<#3078#>(20,20)[r]<#3078#> 51 (235,100)<#3079#>(20,20)[r]<#3079#> (235,110)<#4363#>(-1,0)<#3080#>040<#3080#><#4363#> (025,110)<#4364#>(1,0)<#3081#>160<#3081#> <#4782#>(010,010)<#4785#>,<#4785#><#4782#> (010,010) <#4364#> (145,100)<#3084#>(20,20)[l]<#3084#> 52 (025,100)<#3085#>(20,20)[l]<#3085#> (025,090)<#4365#>(1,0)<#3086#>005<#3086#><#4787#>#tex2html_wrap6175#(060,010)<#4788#>type-declarer<#4788#><#4787#> (1,0)<#3089#>060<#3089#><#4790#>#tex2html_wrap6179#(080,010)<#4791#>parameter-name<#4791#><#4790#> (1,0)<#3092#>030<#3092#> <#4797#>(010,010)<#4800#>)<#4800#><#4797#> (010,010) (1,0)<#3095#>030<#3095#><#4365#> 53 (015,100)<#4366#>(0,-1)<#3096#>080<#3096#><#4366#> (025,020)<#3097#>(20,20)[lb]<#3097#> (025,010)<#4367#>(1,0)<#3098#>030<#3098#><#4367#> 54 (095,080)<#3099#>(20,20)[r]<#3099#> (095,070)<#4368#>(-1,0)<#3100#>040<#3100#><#4368#> (055,060)<#3101#>(20,20)[l]<#3101#> (045,060)<#4369#>(0,-1)<#3102#>040<#3102#><#4369#> 55 (125,080)<#3103#>(20,20)[lt]<#3103#> (115,080)<#4370#>(0,-1)<#3104#>060<#3104#><#4370#> 56 (055,060)<#3105#>(20,20)[lb]<#3105#> (055,050)<#4371#>(1,0)<#3106#>005<#3106#> <#4806#>(040,010)<#4809#>CONST<#4809#><#4806#> (040,010) (1,0)<#3109#>005<#3109#><#4371#> (105,060)<#3110#>(20,20)[rb]<#3110#> 57 (055,040)<#3111#>(20,20)[lb]<#3111#> (055,030)<#4372#>(1,0)<#3112#>005<#3112#> <#4815#>(040,010)<#4818#>VAR<#4818#><#4815#> (040,010) (1,0)<#3115#>005<#3115#><#4372#> (105,040)<#3116#>(20,20)[rb]<#3116#> 58 (055,020)<#3117#>(20,20)[lb]<#3117#> (055,010)<#4373#>(1,0)<#3118#>005<#3118#> <#4824#>(040,010)<#4827#>PROC<#4827#><#4824#> (040,010) (1,0)<#3121#>005<#3121#><#4373#> (105,020)<#3122#>(20,20)[rb]<#3122#> 59 (105,010)<#4374#>(1,0)<#3123#>025<#3123#><#4829#>#tex2html_wrap6207#(100,010)<#4830#>virtual-parameters-pack<#4830#><#4829#> (1,0)<#3126#>005<#3126#><#4374#> (235,020)<#3127#>(20,20)[r]<#3127#> (235,030)<#4375#>(-1,0)<#3128#>110<#3128#><#4375#> (125,040)<#3129#>(20,20)[lb]<#3129#> 60 <#4614#>

Parameters are either objects or procedures, as can be deduced from this rather unwieldy syntax diagram. In case a procedure is to be passed as a parameter, the types of its parameters are in their turn to be specified precisely by means of a <#3130#>virtual-parameters-pack<#3130#>.

(315,160)<#4615#> (000,150)<#4376#>virtual-parameters-pack<#4376#> 61 (000,130)<#4377#>(1,0)<#3132#>030<#3132#> <#4836#>(010,010)<#4839#>(<#4839#><#4836#> (010,010) (1,0)<#3135#>005<#3135#><#4377#> (045,120)<#3136#>(20,20)[r]<#3136#> 62 (235,100)<#3137#>(20,20)[r]<#3137#> (235,110)<#4378#>(-1,0)<#3138#>040<#3138#><#4378#> (025,110)<#4379#>(1,0)<#3139#>160<#3139#> <#4845#>(010,010)<#4848#>,<#4848#><#4845#> (010,010) <#4379#> 63 (025,100)<#3142#>(20,20)[l]<#3142#> (025,090)<#4380#>(1,0)<#3143#>005<#3143#><#4850#>#tex2html_wrap6233#(060,010)<#4851#>type-declarer<#4851#><#4850#> (1,0)<#3146#>170<#3146#> <#4857#>(010,010)<#4860#>)<#4860#><#4857#> (010,010) (1,0)<#3149#>030<#3149#><#4380#> 64 (015,100)<#4381#>(0,-1)<#3150#>080<#3150#><#4381#> (025,020)<#3151#>(20,20)[lb]<#3151#> (025,010)<#4382#>(1,0)<#3152#>030<#3152#><#4382#> 65 (095,080)<#3153#>(20,20)[r]<#3153#> (095,070)<#4383#>(-1,0)<#3154#>040<#3154#><#4383#> (055,060)<#3155#>(20,20)[l]<#3155#> (045,060)<#4384#>(0,-1)<#3156#>040<#3156#><#4384#> 66 (125,080)<#3157#>(20,20)[lt]<#3157#> (115,080)<#4385#>(0,-1)<#3158#>060<#3158#><#4385#> 67 (055,060)<#3159#>(20,20)[lb]<#3159#> (055,050)<#4386#>(1,0)<#3160#>005<#3160#> <#4866#>(040,010)<#4869#>CONST<#4869#><#4866#> (040,010) (1,0)<#3163#>005<#3163#><#4386#> (105,060)<#3164#>(20,20)[rb]<#3164#> 68 (055,040)<#3165#>(20,20)[lb]<#3165#> (055,030)<#4387#>(1,0)<#3166#>005<#3166#> <#4875#>(040,010)<#4878#>VAR<#4878#><#4875#> (040,010) (1,0)<#3169#>005<#3169#><#4387#> (105,040)<#3170#>(20,20)[rb]<#3170#> 69 (055,020)<#3171#>(20,20)[lb]<#3171#> (055,010)<#4388#>(1,0)<#3172#>005<#3172#> <#4884#>(040,010)<#4887#>PROC<#4887#><#4884#> (040,010) (1,0)<#3175#>005<#3175#><#4388#> (105,020)<#3176#>(20,20)[rb]<#3176#> 70 (105,010)<#4389#>(1,0)<#3177#>025<#3177#><#4889#>#tex2html_wrap6261#(100,010)<#4890#>virtual-parameters-pack<#4890#><#4889#> (1,0)<#3180#>005<#3180#><#4389#> (235,020)<#3181#>(20,20)[r]<#3181#> (235,030)<#4390#>(-1,0)<#3182#>110<#3182#><#4390#> (125,040)<#3183#>(20,20)[lb]<#3183#> 71 <#4615#>

A <#3184#>procedure-body<#3184#> has the same form as a <#3185#>main-packet<#3185#> without a <#3186#>bottom-up-part<#3186#>.

(315,040)<#4616#> (000,030)<#4391#>procedure-body<#4391#> 72 (000,010)<#4392#>(1,0)<#3188#>030<#3188#><#4892#>#tex2html_wrap6279#(040,010)<#4893#>root<#4893#><#4892#> (1,0)<#3191#>030<#3191#><#4895#>#tex2html_wrap6283#(080,010)<#4896#>top-down-part<#4896#><#4895#> (1,0)<#3194#>030<#3194#><#4392#> 73 <#4616#>

(315,050)<#4617#> (000,040)<#4393#>procedure-tail<#4393#> 74 (000,020)<#4394#>(1,0)<#3196#>030<#3196#> <#4902#>(040,010)<#4905#>ENDPROC<#4905#><#4902#> (040,010) (1,0)<#3199#>030<#3199#><#4907#>#tex2html_wrap6299#(080,010)<#4908#>procedure-name<#4908#><#4907#> (1,0)<#3202#>030<#3202#><#4394#> 75 (075,010)<#3203#>(20,20)[rt]<#3203#> (095,010)<#3204#>(20,20)[lb]<#3204#> (095,000)<#4395#>(1,0)<#3205#>90<#3205#><#4395#> (185,010)<#3206#>(20,20)[rb]<#3206#> (205,010)<#3207#>(20,20)[lt]<#3207#> 76 <#4617#>

The name of the procedure is repeated after the <#3208#>ENDPROC<#3208#> symbol. In the Elan Programming Environment this name may be left out (in which case it is inserted automatically).