J'essaie de déterminer quelle liste d'entiers est la plus grande. La représentation de [1;2;3]
est actuellement 123
. Donc donné deux listes d'entiers, je veux comparer chaque élément pour déterminer quel nombre est plus grand à la fin. Renvoyant 1
si list1 > list2
, -1
si list1 < list2
et 0
s'ils sont égaux. C'est ce que j'ai jusqu'ici, mais quand j'essaie de l'exécuter, j'ai des erreurs et je ne comprends pas pourquoi. On m'a également demandé de faire tous les récurrents dans la forme de récurrence de la queue chaque fois que possible. Est-ce la récursion correcte de la queue?Déterminer quelle liste d'entiers est la plus grande
let rec compare' list1 list2 currentOrder = match (list1, list2) with
| [],[] -> 0
| list1, [] -> 1
| [], list2 -> -1
| car1::cdr1, car2::cdr2 -> (*car1 contains the current element and cdr1 contains the rest of the list. Ex car1 = [1], cdr2 = [2;3]*)
let nextCompare =
(
if cdr1 = [] && cdr2 = []
then 0
else 1
)
in
(
if (nextCompare != 0)(*To check if we are not at the end of the list*)
then ( (*Compare the cars to determine the currentOrder and recursively call with the next number*)
if car1 > car2
then (compare' (cdr1 cdr2 1))
else if car1 < car2
then (compare' (cdr1 cdr2 -1))
else (compare' cdr1 cdr2 currentOrder)
)
else (*we are at the end of the list so we want to return the current order*)
( (*Still need to check in case there is only 1 digit number, because we did not update currentOrder for it to be returned*)
if car1 > car2
then 1
else if car1 < car2
then -1
else currentOrder
)
)
Printf.printf (compare' [1;2;3] [3;2;1] 0)
Quelles sont les erreurs? – glennsl
@glennsl Pour la ligne "(compare '(cdr1 cdr2 1))" Cette expression a le type' une liste Ceci n'est pas une fonction; il ne peut pas être appliqué. – davy890
Votre problème ici est que vous avez trop de parens. Vous essayez d'appliquer 'cdr2' et' 1' à 'cdr1', ce qui se traduira par le fait que vous vous plaignez que vous traitez la liste' cdr1' comme une fonction :) – glennsl