PHPとファーストコンタクト

食わず嫌いだったPHP。触ってみると手に馴染みそうで良い。
早速、フィボナッチ数列に挑む。

<?php
# 整数の無限リスト
function stream($i) {
  return function() use (&$i) {
    return $i++;
  };
}

# フィボナッチ数列の無限リスト
function fibos() {
  $lazy  = stream(0);
  $prevs = array(0, 0);
  return function() use ($lazy, &$prevs) {
    $now = $lazy();
    if ($now == 0 || $now == 1) {
      $ans = $now;
    }
    else {
      $ans = $prevs[0] + $prevs[1];
    }
    $prevs = array($prevs[1], $ans);
    return $ans;
  };
}

以前もやった遅延評価を使った。

<html>
<head><title>フィボナッチテスト</title></head>
<body>
<?php require_once 'fibo.php';
$f = fibos();
foreach (range(0, 9) as $i) {
  print($i. '番目のフィボナッチ数は'. $f(). "<Br>\n");
}
?>
</body>
</html>

これを実行すると次になる。

<html>
<head><title>フィボナッチテスト</title> </head>
<body>
0番目のフィボナッチ数は0<Br>
1番目のフィボナッチ数は1<Br>
2番目のフィボナッチ数は1<Br>
3番目のフィボナッチ数は2<Br>
4番目のフィボナッチ数は3<Br>
5番目のフィボナッチ数は5<Br>
6番目のフィボナッチ数は8<Br>
7番目のフィボナッチ数は13<Br>
8番目のフィボナッチ数は21<Br>
9番目のフィボナッチ数は34<Br>
</body>
</html>