on aurait de mulitples raisons d'avoir besoin d'un goto :)
je code un script, php-recode qui doit transformer une fonction php codee en tail-rec, en fonction non recursive.
<?php
function sub_f ($a, $b){
if ($a==0) return $b;
else{return sub_f($a-1, $a+$b);}
}
function sumOfNaturals($n){
return sub_f($n, 0);
}
echo sumOfNaturals(50000);
?>
si tu mets ca sur un serveur web, apache va te demander de telecharger la page...
en C, compile avec -O2, en ocaml, en Cpp, ca ne plantera pas.... en php, ca segfault...
alors que c'est un exemple qu'on peut ecrire de plein de facons :
<?php
function sub_f ($a, $b){
start:
if ($a==0) return $b;
else{
$arg0=$a-1;
$arg1=$a+$b;
$a=$arg0; $b=$arg1;
goto start;
}
}
function sumOfNaturals($n){
return sub_f($n, 0);
}
la solution avec un while, for ou autre est aussi faisable dans cet exemple, mais pas generalisable (domage, ca ferait un code super joli ;( )
for ($i=0, $j=0;$i<10;$i++, $j+=3){
echo "$i test $j<br/>";
echo "$i";
}
echo sumOfNaturals(50000);
?>
Avant de faire ca, faut pouvoir detecter les fonctions tail-rec, donc parser du php :) c'est pas simple... mais jme suis appercu qu'on pouvait pas en php a cause du manque de goto, quand j'etais presque pres du but.... Cependant, si t'as une solution elegante pour ce genre de problemes, je suis pour...
/**
* @author coucou747 <coucou747@hotmail.com>
* @see irc://cominweb.uni-irc.net/#programmation
*/