食わず嫌いだった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>