Changer la signature d'une fonction en ocaml

miroo4 Messages postés 5 Statut Membre -  
miroo4 Messages postés 5 Statut Membre -
Bonjour,
supposons que j'ai la fonction suivante:
let split_line line =
let first = line.[0] in
let reste = String.sub (line) 1 ((String.length (line))-1)in
(first, reste) ;;
comment je fais pour l'appeler plusieurs fois, (et changer la signature de la fonction pour qu'elle supporte plusieurs paramètre) car je serais amener à l'utiliser plusieurs fois dans le code : est-ce que la syntaxe d'ocaml me permet de faire
let (first_char, rest_chars) = split_line "the string","th string2" ...!!!!
Merci,
A voir également:

3 réponses

KX Messages postés 19031 Statut Modérateur 3 020
 
Dans ce cas, il te faut une structure de données, une liste, un tableau, ou type personnalisé, car il n'est pas possible en Caml de définir un nombre indéfini de paramètres, ni de définir plusieurs fois la même fonction avec des types de paramètres différents.

let (first_char, rest_chars) = split_line ["the string","th string2"];;

type line = One of string | Two of string*line;;
let (first_char, rest_chars) = Two ("str1",Two ("str2", (One "str3")));;
1
miroo4 Messages postés 5 Statut Membre
 
Merci, cela m'est très utile :)
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Quel serait le résultat de ta fonction split_line à plusieurs arguments ?

Ne serait-il pas plus simple de faire directement une concaténation ?

let (first_char, rest_chars) = split_line ("the string"^"th string2");;
0
miroo4 Messages postés 5 Statut Membre
 
non parce que je dois l'utiliser sur des ligne différents et j'aurais des résultats différents à chaque fois, je voulais juste créer cette fonction pour que je n'utilise pas partout dans mon code un truc du genre let X=String.sub (line) 1 ((String.length (line))-1)in
sachant que line change à chaque fois!
0