write reglas listas formularios explicados ejercicios ejemplos prolog

reglas - Conseguir una variable en término complejo complejo en Prolog



variables en prolog (1)

Tengo un analizador de oraciones Prolog que devuelve una oración (que se pasa como una lista) dividida en dos partes: una Noun_Phrase y una Verb_Phrase . Vea el siguiente ejemplo:

sentence(Sentence, sentence(np(Noun_Phrase), vp(Verb_Phrase))) :- np(Sentence, Noun_Phrase, Remainder), vp(Remainder, Verb_Phrase).

Ahora quiero tomar Noun_Phrase y Verb_Phrase y pasarlos a otro predicado de Prolog, pero primero quiero extraer el primer término de Verb_Phrase (que siempre debe ser un verbo) en una variable y el resto de Verb_Phrase en otro y páselos por separado al siguiente predicado.

Pensé en usar la unificación para esto y lo intenté:

sentence(Sentence, sentence(np(Noun_Phrase), vp(Verb_Phrase))), [Head|Tail] = Verb_Phrase, next_predicate(_, Noun_Phrase, Head, Tail, _).

Pero recibo ERROR: Fuera de la excepción de pila local todo el tiempo. Creo que esto tiene algo que ver con que Verb_Phrase realmente no es una lista. Este es un posible isntance de Verb_Phrase:

VP = vp(vp(verb(making), adj(quick), np2(noun(improvements))))

¿Cómo podría obtener el verb(X) como verbo variable y el resto del término como vairable? ¿Descansar de tal término compuesto en Prolog?


Podría usar =../2 como:

Verb_Phrase=..[Verb|Rest_Term_list].

Ejemplo:

?- noun(improvements)=..[Verb|Rest_Term_list]. Verb = noun, Rest_Term_list = [improvements].