2016-02-04 1 views
1

Considérez le code suivant:Motif incomplet assorti à f #

let list1 = [1; 2; 3; 4; 5];; 
let getThird3 = function 
    |[] ->[]; 
    | _::_::l3::t -> t;; 
getThird3 list1; 

Lorsque contrecollé sur la course de terminal fsharpi il me donne cette erreur

> let list1 = [1; 2; 3; 4; 5];; 

val list1 : int list = [1; 2; 3; 4; 5] 

> let getThird3 = function 
- |[] ->[]; 
- | _::_::l3::t -> t;; 

let getThird3 = function 
----------------^^^^^^^^ 

/Users/nickolasmorales/stdin(17,17): warning FS0025: Incomplete pattern matches on this expression. For example, the value '[_;_]' may indicate a  case not covered by the pattern(s). 

val getThird3 : _arg1:'a list -> 'a list 

Toutes les suggestions? J'ai essayé d'utiliser les deux: seulement TAB et l'espace mais il ne reconnaît rien après la fonction.

+0

Pouvez-vous préciser ce que vous attendez en sortie? Comme c'est basé sur votre question et vos commentaires sur la réponse, je ne sais pas ce que vous voulez. – jdphenix

+0

BTW, il vous manque un deuxième point-virgule sur la dernière ligne ('getThird3 list1;' devrait être 'getThird3 list1 ;;'). C'est peut-être la raison pour laquelle, même lorsque vous corrigez votre fonction pour gérer des listes avec un ou deux éléments en entrée, vous ne voyez toujours pas les résultats. F # n'a pas besoin de points-virgules entre les expressions, mais l'interpréteur interactif F # utilise des points-virgules ** doubles ** entre les expressions pour qu'il sache quand vous avez terminé avec l'entrée. (Parce que ** les ** points virgules sont un opérateur valide, utilisé dans les listes). – rmunn

Répondre

3

Ceci est juste un avertissement:

si vous getThird3 [1;2] vous obtiendrez un matchfailureexception.

L'avertissement doit choisir un endroit spécifique comme base pour l'avertissement et le function est probablement aussi bon qu'ailleurs.

Pour supprimer l'avertissement que je changerais le match à

| _::_::l3::t -> t;; 
| _ -> failwith "not a long enough list" 
+0

alors comment puis-je obtenir ma réponse? –

+1

pour quoi - le code comme écrit fonctionnera correctement - essayez de faire quelque chose comme 'getThird3 [1; 2; 3; 4; 5; 6; 7; 8; 9]' –

+0

cela fonctionne avec le failwith! Je vous remercie! alors comment puis-je éviter l'avertissement comme ça et obtenir une réponse? –