Убого:
MODULE Power;
 PROCEDURE Do*(x: REAL; n: INTEGER): REAL;
 VAR y: REAL; i: INTEGER;
 BEGIN
  ASSERT(n >= 0);
  y := 1.0; i := n;
  WHILE i > 0 DO
    IF ODD(i) THEN y := y*x END;
    x := x*x; i := i DIV 2
  END
 RETURN
  y
 END Do;
END Power.Уже лучше:
power ← f R N R { (x n) 
  (y) ← 1.0
  (↺) n > 0 {
    n|2 = 1 ? y ×← x
    x ×← x
    n ÷← 2
  }
  y
}Божественно:
power ← {
    ⍵=0 : 1
    (1 ⍺)[1+2|⍵] × (⍺×⍺) ∇ ⌊⍵÷2
} 
Комментариев нет:
Отправить комментарий