2010-11-27 22 views
2

J'apprends le ML, est-ce que quelqu'un peut expliquer ce que cela veut dire?schémas exhaustifs

+1

J'ai supprimé l'étiquette Lisp de cette question, car je ne voyais aucune relation avec Lisp. Lisp n'a même pas de correspondance de modèle. – sepp2k

+1

En arrière-plan * pourquoi * on devrait les utiliser: http://stackoverflow.com/questions/1882334 – Dario

Répondre

5

Une correspondance de modèle est exhaustive si elle ne peut pas échouer. C'est à dire. tous les cas qui pourraient éventuellement se produire sont couverts par un motif.

Par exemple, le match de modèle suivant est pas exhaustive car elle ne couvre pas le cas que la liste est vide:

fun sum (x::xs) = x + sum xs 

Ce qui suit est exhaustive, car les deux cas sont couverts:

fun sum (x::xs) = x + sum xs 
    | sum [] = 0 

En général, une correspondance de modèle sur un type de données algébriques est exhaustive si et seulement s'il y a un cas par défaut ou s'il y a un cas pour tous les constructeurs et si la correspondance pour chaque sous-modèle est exhaustive.