bon je te montre sur les deux premiers exemples :
(en caml la représentation des listes est en fait du type a :: (b :: (c :: [])), abrégée en [a; b; c] en l'occurrence, même principe avec une syntaxe différente quoi).
retournerliste:-
retournerliste([a,b,c,d,e,f,g],[]).
retournerliste([],Nliste):-
write(Nliste).
retournerliste([Tete|Corps],Nliste):-
retournerliste(Corps, [Tete, Nliste]).
->
let retournerliste =
let rec retournerliste = function
([], nliste) -> nliste
| (tete :: corps, nliste) -> retournerliste (corps, tete :: nliste)
in retournerliste ([`a; `b; `c; `d; `e; `f; `g], [])
bon en fait là j'ai utilisé des couples pour que ça ressemble le plus possible mais sinon j'aurais plutôt fait ça (je change l'ordre des arguments et je ne matche que le deuxième puisque de toute façon pour nliste c'est inutile) :
(c'est une fonction curryfiée, c'est à dire une fonction qui au premier argument associe une fonction du deuxième argument ; let rec indique que la définition est récursive et nliste est le premier argument.)
let retournerliste =
let rec retournerliste nliste = function
[] -> nliste
| tete :: corps -> retournerliste (tete :: nliste) corps
in retournerliste ([`a; `b; `c; `d; `e; `f; `g], [])
résultat :
# retournerliste;;
- : [> `a | `b | `c | `d | `e | `f | `g ] list = [`g; `f; `e; `d; `c; `b; `a]
(à gauche du signe = c'est le type, à droite c'est la valeur)
Deuxième exemple :
remplacerelement(Valeur, Base):-
remplacerelement(Valeur,Base,[a,b,c,d,e,f,g],[]).
remplacerelement(Valeur, Base, [Base|Corps],Nliste):-
remplacerelement(Valeur,Base,Corps,[Valeur,Nliste]).
remplacerelement(_, _, [],Nliste):-
write(Nliste).
remplacerelement(Valeur, Base, [Tete|Corps], Nliste):-
remplacerelement(Valeur,Base,Corps,[Tete,Nliste]).
->
let remplacerelement valeur base =
let rec remplacerelement = function
(valeur, base, re_base :: corps, nliste) when base = re_base ->
remplacerelement (valeur, base, corps, valeur :: nliste)
| (_, _, [], nliste) -> nliste
| (valeur, base, tete :: corps, nliste) ->
remplacerelement (valeur, base, corps, tete :: nliste)
in remplacerelement (valeur, base, [`a; `b; `c; `d; `e; `f; `g], [])
Comme tu le vois, il y a une petite différence dans le premier pattern (utiliser deux fois le même identifiant ne marche pas, il faut faire en deux fois en mettant deux identifiants différents et une clause when), mais bon le principe est le même.
résultat :
# remplacerelement `t `c;;
- : [> `a | `b | `c | `d | `e | `f | `g | `t ] list =
[`g; `f; `e; `d; `t; `b; `a]
(si tu as des questions n'hésite pas ^^)