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.