On nous donnes du code PHP pour trouver la valeur max dans une série mais le code ne semble pas fonctionner...
j'ai tester dans un compiler PHP et j'ai des messages d'erreur.
une idée ?
PHP :
<?php
function maximum($liste) {
$max_actuel = 0;
foreach ($liste as $elem)
if ($elem > $max_actuel)
$max_actuel = $elem;
return $max_actuel;
}
?>
Erreur du compiler :
Error(s), warning(s):
PHP Parse error: syntax error, unexpected ' ' (T_STRING) in source_file.php on line 2
Concernant le code Ocaml; quelqu'un saurait me dire comment il s'utilise ?
Ocaml :
let maximum liste =
let rec parcours max_actuel = function
| [] -> max_actuel
| elem::reste -> parcours (max max_actuel elem) reste
in parcours 0 liste
j'ai bien compris que c'est une fonction mais je n'arrive pas a voir son nom ni comment on entre les arguments.
genre en python j'aurai fait nomFonction(a, b) mais la je ne vois pas :(
je ne comprend pas non plus ce qu'est le mot "parcours"
Merci
EDIT :
j'étais en train d'essayer de convertir le code en python et en fait je ne comprend pas pourquoi pour trouver la valeur max, il se met initialement a 0 ?
Si la liste de nombre a comparer est négatives, rien ne fonctionnera ?
Pourquoi ne se met on pas a l'index[0] de la liste afin de comparer tout les i a index[0] puis de garder la plus grande valeur en tant que max ?
genre :
lst = [3, 12, 5]
vMax = lst[0]
for i in lst :
if i > vMax:
vmax = i
Et non pour les listes avec que des nombres strictement négatifs, tu auras zéro comme maximum. L'auteur a sûrement fait ça pour éviter le cas de la liste vide, mais autant utiliser min_int. En fait, on pourrait écrire ça.
let rec maximum = function
| [] -> min_int
| h::t -> max h (maximum t)
Ou on pourrait lever une exception si on demande le maximum d'une liste vide.
EDIT : comme d'habitude l'éditeur Markdown du forum est chiant, les -> sont bien sûr à remplacer par ->.
Chez moi le code PHP fonctionne normalement. Peut-être as-tu fait une erreur en le recopiant ? Il y a bien sûr l'erreur de conception que tu soulèves, mais pas d'erreur de parsing.
En ce qui concerne ton edit, c'est effectivement une bien meilleure manière de procéder.
Enfin, pour OCaml, les fonctions sont utilisées différemment, via la currifycation. C'est quelque chose de courant en lambda-calcul, sur lequel repose OCaml. let maximum liste = définit une fonction, maximum, qui aura comme seul argument liste. Juste en-dessous, let rec parcours max_actuel = function est une fonction (récursive) qui prend en arguments deux paramètres, max_actuel et une liste, et l'on essaye de voir si la liste est vide [], ou si elle contient au moins un élément elem::reste. Ensuite , ligne 4 parcours s'appelle lui-même avec le code parcours (max max_actuel elem) reste. Le premier argument est le maximum actuel, le second le reste de la liste à explorer.
Cette manière un peu bizarre de faire s'appelle de la récursivité terminale, c'est pratique parce que ça consomme beaucoup moins de ressources que la récursivité classique. Mais si tu ne sais pas ce que c'est, regarde plutôt la solution donnée par yo@n.
Je ne vois pas trop ce qui pourrait cause l'erreur PHP dont tu parles puisqu'il n'y a pas de chaîne de caractères dans l'extrait de code. Tu es sûr que le problème n'est pas de ton côté ?
En OCaml, différents sucres syntaxiques (dont la curryfication) font qu'une fonction peut se déclarer avec quelque chose comme let fonction_name [args...] = ....
Ici, on voit qu'est déclarée une fonction maximum recevant un paramètre liste.
parcours correspond à une fonction définie à l'intérieur de la première qui permet de parcourir la liste récursivement tout en en détectant la valeur maximum.
Pour ce qui est de l'initialisation à 0, ta remarque est juste.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique