function getPrimes() { $num = 2; while(true) { if (isPrime($num)) { yield $num; } // --- ③ $num++; } } function isPrime(int $value): bool { $prime = true; // 例、2や3 の平方根は 2 より下なので、for ループが実行されず、$prime === true が返される。 for ($i=2; $i <= floor(sqrt($value)); $i++) { // --- ① print 'a'. $value. 'a, '; print '|'. $i. '| <br>'; if ($value % $i === 0) { $prime = false; break; } } return $prime; // --- ② } foreach(getPrimes() as $prime) { // --- ④ if($prime > 8) { die(); } print ' '. $prime. ', '; }
解釈:
①:2や3 の平方根は 2 より下なので、for ループが実行されず、
②:$prime === true が返される。
③:if( isPrime === true ) となり、yield $num;
が実行される。つまり、2や3が getPrimes関数の戻り値となる。
④:$prime === 2や3 となり、print $prime;
で、2や3 などの素数が出力される。