Vous devez inverser la liste. Une façon d'aller à la solution est de penser à quoi ressemblerait une fonction rev
. Voici une première tentative:
let rec rev lst =
match lst with
| h::t -> (rev t)@[h]
| [] -> []
Cette fonction inverse une liste, mais maintenant nous allons faire une autre version qui utilise un accumulateur, cela signifie qu'au lieu d'utiliser une liste vide dans la dernière ligne, nous utiliserons un paramater d'addition:
let rec rev lst acc =
match lst with
| h::t -> rev t (h::acc)
| [] -> acc
Alors maintenant, nous devons passer la liste vide comme paramètre:
rev [1..4] [];;
val il: int list = [4; 3; 2; 1]
Vous pouvez vous demander pourquoi avons-nous besoin d'une telle fonction, eh bien cette fonction est tail recursive mais ce n'est pas votre question, vous cherchez à ajouter deux listes. Il s'avère que c'est 90% de la fonction que vous recherchez.
Si au lieu de passer une liste vide vous passez la deuxième liste:
rev [1..4] [5..8];;
val il: int list = [4; 3; 2; 1; 5; 6; 7; 8]
Assez proche, mais oui, la première liste est inversée, ok, mais nous avons cette fonction qui peut renverser des listes, donc nous allons inverser la première liste:
rev (rev [1..4] []) [5..8] ;;
val il: int list = [ 1; 2; 3; 4; 5; 6; 7; 8]
Grand, maintenant ce rev
pourrait être notre fonction loop
:
let append lst1 lst2 =
let rec rev lst acc =
match lst with
| h::t -> rev t (h::acc)
| [] -> acc
rev (rev lst1 []) lst2
qui fonctionne comme prévu, mais notez que nous sommes en train d'appeler deux fois notre fonction rev
paramétrés. J'espère que vous aurez une idée de la façon dont la programmation fonctionnelle vous permet de combiner des fonctions afin de résoudre différents problèmes. Dans ce cas, nous combinons une fonction avec elle-même.
Et quelle est votre question? Si c'est à propos du mauvais résultat alors essayez encore, et rappelez-vous que 'hd :: tl' est comme attacher un' hd' à la tête de 'tl', pas ajouter à la fin de celui-ci – xuanduc987
Le résultat souhaité est [1; 2; 3; 4; 5; 6; 7; 8; 9; 10] –
En quoi cette question est-elle différente de celle d'hier? S'il vous plaît voir les réponses là-bas. – dumetrulo