/* Representació de sortida: [[1,cucharada,miel],[3,unidad,melocoton],[1,litro,agua], ...] */ analisi(F,X,Y) :- frase(F,X,Y). frase(LIM) --> ing(LIM). frase(LI) --> ing(LIM), ll_ingredients(RI),{conc(LIM,RI,LI)}. conc([],L,L). conc([C|R],L,[C|NL]):- conc(R,L,NL). /* Llista d'ingredients */ ll_ingredients(LIM) --> conj, ing(LIM). ll_ingredients(LI) --> coma, ing(LIM), ll_ingredients(RI), {conc(LIM,RI,LI)}. /* 1 ingredient o varis de la mateixa mesura */ ing([[Q,M,NI]]) --> det(G,N,Q), mesura(G,N,M), noming(M,NI). ing([[Q,M,NI]|RI]) --> det(G,N,Q), mesura(G,N,M), noming(M,NI), ll_ing_mesura(RI,Q,M,G). /* Llista d'ingredients de la mateixa mesura. Quantitat sempre 1 */ ll_ing_mesura([[1,M,NI]],1,M,G) --> conj, un_altre(G), noming(M,NI). ll_ing_mesura([[1,M,NI]|LIM],1,M,G) --> coma, un_altre(G), noming(M,NI), ll_ing_mesura(LIM,1,M,G). /* Predicats diversos: concatenació de dues llistes */ un_altre(G) --> [W], {altre(W,G)}. coma --> [',']. conj --> [y]. det(G,N,Q) --> [W], {det1(W,G,N,Q)}. mesura(G,N,M) --> [W], {mesura1(W,G,N,M)}. mesura(G,N,M) --> {mesura1([],G,N,M)}. noming(M,NI) --> [de,W], {tmesura(M,TM), cat_ing(W,TM,NI)}. noming(unidad,NI) --> [W], {tmesura(unidad,TM), cat_ing(W,TM,NI)}. noming(M,NI) --> [de,W1,de,W2], {tmesura(M,TM), cat_ing([W1,de,W2],TM,NI)}. det1(un,masc,sing,1). det1(una,fem,sing,1). det1(dos,_,plur,2). det1(tres,_,plur,3). det1(cincuenta,_,plur,50). det1(cien,_,plur,100). det1(trescientos,masc,plur,300). mesura1(kilo,masc,sing,kilo). mesura1(kilos,masc,plur,kilo). mesura1(cucharada,fem,sing,cucharada). mesura1(cucharadas,fem,plur,cucharada). mesura1(litro,masc,sing,litro). mesura1(litros,masc,plur,litro). mesura1(chorro,masc,sing,chorro). mesura1(chorros,masc,plur,chorro). mesura1(pizca,fem,sing,pizca). mesura1(pizcas,fem,plur,pizca). mesura1(taza,fem,sing,taza). mesura1(tazas,fem,plur,taza). mesura1(gramo,masc,sing,gramo). mesura1(gramos,masc,plur,gramo). mesura1([],masc,sing,unidad). mesura1([],masc,plur,unidad). tmesura(kilo,comestible). tmesura(gramo,comestible). tmesura(unidad,comestible). tmesura(litro,liquid). tmesura(chorro,liquid). tmesura(cucharada,liquid). tmesura(taza,liquid). tmesura(pizca,ingr_basic). tmesura(cucharada,ingr_basic). tmesura(kilo,ingr_basic). tmesura(gramo,ingr_basic). cat_ing(miel,liquid,miel). cat_ing(agua,liquid,agua). cat_ing([zumo,de,limon],liquid,zumo_de_limon). cat_ing([aceite,de,oliva],liquid,aceite_de_oliva). cat_ing(manzana,comestible,manzana). cat_ing(manzanas,comestible,manzanas). cat_ing(melocoton,comestible,melocoton). cat_ing(melocotones,comestible,melocotones). cat_ing(pasa,comestible,pasa). cat_ing(pasas,comestible,pasas). cat_ing(azucar,ingr_basic,azucar). cat_ing(sal,ingr_basic,sal). altre(otro,masc). altre(otra,fem).