'begin' 'comment' an example for the difference between call-by-name and call-by-value in recursive environments. ; 'integer' 'procedure' ONE; 'begin' outstring (1, `ONE '); ONE := 1 'end'; 'procedure' foo by val (ii); 'value' ii; 'integer' ii; 'if' ii > 0 'then' foo by val (ii - ONE); 'procedure' foo by name (ii); 'if' ii > 0 'then' foo by name (ii - ONE); outstring (1, `by-name : '); foo by name (5); outstring (1, `\nby-value : '); foo by val (5); outstring (1, `\n') 'end'