2013-04-08 1 views

Répondre

3

Utilisez List.mem pour faire la recherche d'une correspondance.

let a = (3,4) 
List.mem a [(1,2); (3,4); (5,6)] 

Vous pouvez également utiliser List.memq si vous voulez vérifier si les deux éléments font référence à la fois la même entité en mémoire.

+0

Merci, cela fonctionne vraiment. Je me demandais juste s'il y avait un moyen d'écrire votre propre fonction qui permettrait de vérifier la liste de la même manière, returnig vrai ou faux. – prima

+3

Bien sûr leur est, vous pouvez vérifier le code source du module liste si vous avez des questions; c'est très lisible. – nlucaroni

+0

[Un ensemble de sources ici.] (Http://docs.camlcity.org/docs/godipkg/3.12/godi-ocaml/lib/ocaml/std-lib/list.ml) –

0

Voici un indice sur la façon de l'écrire vous-même. La façon naturelle de traiter une liste est de regarder d'abord le premier élément, puis de vérifier récursivement le reste de la liste jusqu'à ce que vous ayez une liste vide. Pour ce problème, vous pouvez énoncez l'algorithme en anglais comme suit:

Si la liste est vide, l'article n'est pas dans la liste, autre si le premier élément de la liste est égale à l'élément alors il est, sinon c'est la réponse à (l'élément est-il dans le reste de la liste?)

Il vous suffit maintenant de traduire ceci en code OCaml (en utilisant une fonction récursive). En général, si vous pouvez décrire ce que vous voulez faire en termes de parties plus petites ou plus simples du problème, alors écrire le code recursive est simple (bien que vous devez faire attention les cas de base sont corrects). Lorsque vous utilisez une liste ou des données structurées en arborescence, la façon de décomposer le problème est généralement évidente.