2010-10-05 15 views
10

¿Hay alguna forma de determinar el tipo de elemento dentro de una lista en Prolog? Sé que las variables no están escritas explícitamente en Prolog, pero necesito verificar si un elemento es un número, un personaje específico, etc. ¿Cómo se puede lograr esto?Comprobación del tipo de Prolog

+0

Para tipos más complejos que los primitivos, puede consultar el mecanismo de manejo de registros SWI_PROLOG (http://tinyurl.com/2gy53rr). Esto le permitirá expresar tipos compuestos con campos de acceso con nombre, y automáticamente generará todos los predicados de comprobación de tipo, dada una especificación de registro. ¡Muy útil! – sharky

Respuesta

11

Prolog define un grupo de predicados incorporados para propósitos de prueba Tipo: var/1, atom/1, integer/1, float/1, atomic/1, compound/1, nonvar/1, number/1, todos con un significado bastante claro si conoces los tipos de datos del idioma. Para caracteres específicos, puede explotar la unificación con ese carácter, después de verificar que el elemento no sea una variable libre (de lo contrario, la unificación siempre es exitosa).

4

Usted podría intentar este código:

isList([_|_]). 
isList([]). 

espero que ayude.

+4

No responde la pregunta. – Junuxx

+1

... y 'isList ([a | b])' tiene éxito, pero no es una lista. – false

+3

Sé que no tiene nada que ver con la pregunta, pero lo que quiso decir, creo, fue 'isList ([_ | Tail]: - isList (Tail) .' en lugar de la primera línea – Yolgie

0

a la lista de verificación puede probar:

listing(is_list/1, list_functor/1). 

is_list(X) :- 
    functor(X, F, _), 
    list_functor(F). 

list_functor('.'). 
list_functor('[]'). 
2

Para comprobar si una variable está ligada a una lista, puede utilizar is_list/1.

Cuestiones relacionadas