Progetto prolog.. help!!

di il
3 risposte

Progetto prolog.. help!!

Buonasera è da giorni che ci provo ma non riesco...
I monomi devono essere rappresentati da termini siffatti:
m(Coefficient, TotalDegree, VarsPowers)
per i quali si pu`o scrivere il predicato:
is_monomial(m(_C, TD, VPs)) :-
integer(TD),
TD >= 0,
is_list(VPs).
Tralasciamo al momento come controllare Coefficient. La lista VarsPowers contiene termini come il
seguente:
v(Power, VarSymbol)
per i quali possiamo scrivere il predicato:
is_varpower(v(Power, VarSymbol)) :-
integer(Power),
Power >= 0,
atom(VarSymbol).

Chi riuscirebbe a risolvermi il Predicato as_monomials(Expression, Monomial) cioè :
Il predicato as_monomials `e vero quando Monomial `e il termine che rappresenta il monomio risultante del parsing dell'espressione Expression.
Esempio

?-as_monomials (3*y*w*t^3, M).
M = m(3, 5, [v(3, t), v(1, w), v(1, y)].

E spiegarmi il motivo?

3 Risposte

  • Re: Progetto prolog.. help!!

    Ma quante volte POSTI la stessa domanda?
    NE BASTA UNA!

    E poi, ti ricordo, che il Prolog e' un linguaggio MOOOOOOOLTO specialistico, conosciuto da un ristrettissimo numero di persone ed e' utilizzato in contesti MOOOOOOLTO specifici (AI ad esempio).

    Quindi:

    1) il numero di persone che saprebbero risponderti, come ti ho gia' scritto nell'altro post, si possono contare sulle dita della mano di un monco (vabbe, al monco rimane almeno una falange perche' io, in Prolog, ci SAPEVO programmare, un milione di anni fa)
    2) per poter identificare un MONOMIO, DEVI poter descrivere un POLINOMIO!

    Comunque, la soluzione e' BANALE: un POLINOMIO e' SOMMA/SOTTRAZIONE di MONOMI, quindi se nella tua ESPRESSIONE (che NON DEVE CONTENERE PARENTESI) ci sono SOMME o SOTTRAZIONI, ecco che la tua estressione NON PUO' ESSERE un MONOMIO!
  • Re: Progetto prolog.. help!!

    Scusami non lo vedevo più,
    Comunque no.. dando in input un monomio ad esempio
    ?-as_monomials(5x^2*6y^3, G)
    G = m(11, 5, [v(2, x), v(3, y)]).
    In pratica il primo è la somma dei coefficienti
    Il secondo è la somma dei coefficienti e il terzo é una lista dove mettono coefficiente e base.
    Devo farlo ricorsivo.. come caso base ho messo quando do solo un coefficiente o quando do solo una base elevato all'esponente, ma non riesco a fare il caso ricorsivo
  • Re: Progetto prolog.. help!!

    Immagino non serva più, ma il caso ricorsivo è:

    as_monomial(M, m(C, TD, VPs)) :-
    M = A*B,
    as_monomial(A, m(Ca, TDa, VPsa)),
    as_monomial(B, m(Cb, TDb, VPsb)),
    C is Ca * Cb,
    TD is TDa + TDb,
    append(VPsa,VPsb,VPs).

    Se i casi base sono definiti correttamente, porta al risultato per l'esempio di input che hai riportato.
Devi accedere o registrarti per scrivere nel forum
3 risposte