Страницы

Превращение O→A

Убого:

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
}

Комментариев нет:

Отправить комментарий