Jensen's Device
From Wikipedia, the free encyclopedia
Jensen's Device is a computer programming technique devised by Danish computer scientist Jørn Jensen after studying the ALGOL 60 Report.[citation needed]
The following program was proposed to illustrate the technique. It computes the 100th harmonic number:
begin integer i; real procedure sum (i, lo, hi, term); value lo, hi; integer i, lo, hi; real term; comment term is passed by-name; begin real temp; temp := 0; for i:= lo step 1 until hi do temp:= temp + term; sum:= temp end; print (sum (i, 1, 100, 1/i)) end
The above exploits call by name to produce the correct answer (5.187...). It depends on the assumption that an expression passed as an actual parameter to a procedure would be re-evaluated every time the corresponding formal parameter's value was required. If the last parameter to sum had been passed by value, the result would have been 100 × 1/1 = 100.
Donald Knuth later proposed the Man or Boy Test as a more rigorous exercise.