Re: Esercitazione In Prolog : problema di correzione ?

Dario Bianchi (bianchi)
Tue, 6 May 1997 16:25:56 +0200 (MET DST)

Come puo' vedere non e' facole decigrare la cosa.
Provi a mandarmi solo il testo che interessa !!

>
> ----------
> X-Sun-Data-Type: text
> X-Sun-Data-Description: text
> X-Sun-Data-Name: text
> X-Sun-Charset: us-ascii
> X-Sun-Content-Lines: 19
>
> Universita' degli studi di Parma
> D.U. Ingegneria Informatica & Automatica
>
> From : Gian Luca Cocchi
> E-mail : dia354@magoo.cedi.unipr.it
>
>
> 06/05/97
>
> Ho provato il test3 ma non capisco dove ci sono i possibili 2 errori.
> Come suggerito in aula con il professore G. Adorni le invio copia del test
> "incriminato", per verificare l'esattezza delle risposte.
>
> Se gli errori ci sono mi scuso per il disturbo.
>
>
> Ringrazio .
> Distinti Saluti.
>
> ----------
> X-Sun-Data-Type: default
> X-Sun-Data-Description: default
> X-Sun-Data-Name: test_3.html
> X-Sun-Charset: us-ascii
> X-Sun-Content-Lines: 271
>
> <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
> <HTML><HEAD><TITLE>Test</TITLE>
> <SCRIPT>
> <!-- Hide script from HTML-compliant browsers
> function deleteCookie(name) {
> var todayDate = new Date();
> todayDate.setDate(todayDate.getDate() - 1);
> document.cookie = name + "=; expires=" + todayDate.toGMTString() + ";"
> }
>
> // End script hiding. -->
> </SCRIPT>
>
> </HEAD><BODY><H1>Fine Test</H1>
> Login: <EM>dia354</EM>
> <P>26 min.
>
> <TABLE BORDER>
> <TH>N. Dom.</TH><TH>Corrette</TH><TH>Sbagliate</TH><TH>Mancanti</TH><TH>Commenti</TH><TR>
> <TD ALIGN=CENTER>1</TD><TD ALIGN=CENTER>1</TD><TD ALIGN=CENTER>0</TD><TD ALIGN=CENTER>0</TD><TD ALIGN=LEFT></TD><TR>
> <TD ALIGN=CENTER>2</TD><TD ALIGN=CENTER>5/7</TD><TD ALIGN=CENTER>2/7</TD><TD ALIGN=CENTER>0/7</TD><TD ALIGN=LEFT></TD><TR>
> <TD ALIGN=CENTER>3</TD><TD ALIGN=CENTER>1</TD><TD ALIGN=CENTER>0</TD><TD ALIGN=CENTER>0</TD><TD ALIGN=LEFT></TD><TR>
> <TD ALIGN=CENTER>4</TD><TD ALIGN=CENTER>7/7</TD><TD ALIGN=CENTER>0/7</TD><TD ALIGN=CENTER>0/7</TD><TD ALIGN=LEFT>5) X= fragole.
> 7) La parte Dx non ha successo.</TD><TR>
> <TD ALIGN=CENTER>5</TD><TD ALIGN=CENTER>1</TD><TD ALIGN=CENTER>0</TD><TD ALIGN=CENTER>0</TD><TD ALIGN=LEFT></TD><TR>
> <TD ALIGN=CENTER>6</TD><TD ALIGN=CENTER></TD><TD ALIGN=CENTER></TD><TD ALIGN=CENTER></TD><TD ALIGN=LEFT>comune(L1,L2,E):-membro(E,L1),membro(E,L2).</TD><TR>
> <TD ALIGN=CENTER>7</TD><TD ALIGN=CENTER></TD><TD ALIGN=CENTER></TD><TD ALIGN=CENTER></TD><TD ALIGN=LEFT>inverti([],[]).
> inverti([H|T],L):-inverti(T,L1),conc(L1,[H],L).</TD><TR>
> </TABLE>
> <P>
> Il test &egrave; terminato.
> Di seguito puoi rivedere il testo delle domande e le risposte che hai dato.
> Nelle domande dove hai dato una risposta sbagliata cerca di capire perch&eacute;,
> eventualmente rileggendo la parte dell'ipertesto che riguarda quell'argomento.
> Se proprio non ci riesci puoi mandare un messaggio al tutor.
> <P>
> Non cercare di modificare le risposte, perch&eacute; esse sono gi&agrave; state
> trasmesse al tutor.
> Se lo fai, ottieni solo di non sapere pi&ugrave; quale era la tua risposta iniziale.
> <P>&nbsp;<HR SIZE=6>
> <H3>Domanda N. 1</H3>
> <HR SIZE=2>
> <FONT SIZE=+1 COLOR=#008080>
> Sia data la lista
> <code>
> [[a,b],c,d,[e,f]]
> </code>
> Dire qual'&egrave; la <i>testa</i> e qual'&egrave; la <i>coda</i> :
>
> </FONT>
> <HR SIZE=2>
> Selezionate la vostra risposta:
> <FORM ACTION="http://attila.eng.unipr.it/cgi-bin/people/educal/perl/test" METHOD="POST">
> <INPUT TYPE="hidden" NAME="domanda" VALUE=1>
> <INPUT TYPE="hidden" NAME="tipo" VALUE=1>
> <BLOCKQUOTE><FONT COLOR=#002080>
> <TABLE CELLPADDING=2>
>
> <TD><FONT SIZE=-2>1</FONT></TD><TD><INPUT TYPE="radio" NAME="risposta" VALUE="1"><tt>Testa=[a], Coda=[[b],c,d,[e,f]].</tt></TD><TR>
> <TD><FONT SIZE=-2>2</FONT></TD><TD><INPUT TYPE="radio" NAME="risposta" VALUE="2"><tt>Testa=[a,b], Coda=[e,f].</tt></TD><TR>
> <TD><FONT SIZE=-2>3</FONT></TD><TD><INPUT TYPE="radio" NAME="risposta" VALUE="3"><tt>Testa=[a],Coda=[[b]]</tt></TD><TR>
> <TD><FONT SIZE=-2>4</FONT></TD><TD><INPUT TYPE="radio" NAME="risposta" VALUE="4" CHECKED><tt>Testa=[a,b],Coda=[c,d,[e,f]]</tt></TD><TR>
> <TD COLSPAN=2>&nbsp;</TD><TR>
> <TD><FONT SIZE=-2>0</FONT></TD><TD><INPUT TYPE="radio" NAME="risposta" VALUE="0"><I>Non so</I></TD>
> </TABLE></FONT></BLOCKQUOTE>
>
> Per eventuali <B>commenti</B> potete utilizzare la finestra qui sotto:<br>
> <TEXTAREA NAME="commenti" ROWS=3 COLS=60></TEXTAREA> <P>
> </FORM>
> <P>&nbsp;<HR SIZE=6>
> <H3>Domanda N. 2</H3>
> <HR SIZE=2>
> <FONT SIZE=+1 COLOR=#008080>
> Dire quale dei seguenti <i>matching</i> avranno successo:
>
> </FONT>
> <HR SIZE=2>
> Selezionate le vostre risposte:
> <FORM ACTION="http://attila.eng.unipr.it/cgi-bin/people/educal/perl/test" METHOD="POST">
> <INPUT TYPE="hidden" NAME="domanda" VALUE=2>
> <INPUT TYPE="hidden" NAME="tipo" VALUE=2>
> <BLOCKQUOTE><FONT COLOR=#002080>
> <TABLE CELLPADDING=2>
> <TD>&nbsp;</TD><TD ALIGN=CENTER><FONT SIZE=-2>1</FONT></TD><TD>&nbsp;</TD><TD ALIGN=CENTER><FONT SIZE=-2>2</FONT></TD><TD>&nbsp;</TD><TD ALIGN=CENTER><FONT SIZE=-2>0</FONT></TD><TR>
>
> <TD><tt>[[a,b,c,d]] = [T|C].</tt></TD><TD><INPUT TYPE="radio" NAME="r1" VALUE="1" CHECKED>Vero</TD><TD>&nbsp;</TD><TD><INPUT TYPE="radio" NAME="r1" VALUE="-1">Falso</TD><TD>&nbsp;</TD><TD><INPUT TYPE="radio" NAME="r1" VALUE="0">Non so</TD><TR>
> <TD><tt>[[a,b,c,d]] = [X].</tt></TD><TD><INPUT TYPE="radio" NAME="r2" VALUE="1" CHECKED>Vero</TD><TD>&nbsp;</TD><TD><INPUT TYPE="radio" NAME="r2" VALUE="-1">Falso</TD><TD>&nbsp;</TD><TD><INPUT TYPE="radio" NAME="r2" VALUE="0">Non so</TD><TR>
> <TD><tt>[[a,b,c,d]] = [X,[Y,Z,T]].</tt></TD><TD><INPUT TYPE="radio" NAME="r3" VALUE="1">Vero</TD><TD>&nbsp;</TD><TD><INPUT TYPE="radio" NAME="r3" VALUE="-1" CHECKED>Falso</TD><TD>&nbsp;</TD><TD><INPUT TYPE="radio" NAME="r3" VALUE="0">Non so</TD><TR>
> <TD><tt>[[a,b,c,d]] = [X|[Y,Z,T]].</tt></TD><TD><INPUT TYPE="radio" NAME="r4" VALUE="1">Vero</TD><TD>&nbsp;</TD><TD><INPUT TYPE="radio" NAME="r4" VALUE="-1" CHECKED>Falso</TD><TD>&nbsp;</TD><TD><INPUT TYPE="radio" NAME="r4" VALUE="0">Non so</TD><TR>
> <TD><tt>[[a,b,c,d]] = [X,Y].</tt></TD><TD><INPUT TYPE="radio" NAME="r5" VALUE="1">Vero</TD><TD>&nbsp;</TD><TD><INPUT TYPE="radio" NAME="r5" VALUE="-1" CHECKED>Falso</TD><TD>&nbsp;</TD><TD><INPUT TYPE="radio" NAME="r5" VALUE="0">Non so</TD><TR>
> <TD><tt>[[a,b,c,d]] = [[X|[Y,Z,T]]].</tt></TD><TD><INPUT TYPE="radio" NAME="r6" VALUE="1" CHECKED>Vero</TD><TD>&nbsp;</TD><TD><INPUT TYPE="radio" NAME="r6" VALUE="-1">Falso</TD><TD>&nbsp;</TD><TD><INPUT TYPE="radio" NAME="r6" VALUE="0">Non so</TD><TR>
> <TD><tt>[[a,b,c,d]] = [X,Y|Z].</tt></TD><TD><INPUT TYPE="radio" NAME="r7" VALUE="1">Vero</TD><TD>&nbsp;</TD><TD><INPUT TYPE="radio" NAME="r7" VALUE="-1" CHECKED>Falso</TD><TD>&nbsp;</TD><TD><INPUT TYPE="radio" NAME="r7" VALUE="0">Non so</TD><TR>
> </TABLE></FONT></BLOCKQUOTE>
>
> Per eventuali <B>commenti</B> potete utilizzare la finestra qui sotto:<br>
> <TEXTAREA NAME="commenti" ROWS=3 COLS=60></TEXTAREA> <P>
> </FORM>
> <P>&nbsp;<HR SIZE=6>
> <H3>Domanda N. 3</H3>
> <HR SIZE=2>
> <FONT SIZE=+1 COLOR=#008080>
> Dire quale sar&agrave; il risultato del <i>matching</i>:
> <code>
> [[a,b,c,d,e]] = [[X|Y]|T].
> </code>
>
> </FONT>
> <HR SIZE=2>
> Selezionate la vostra risposta:
> <FORM ACTION="http://attila.eng.unipr.it/cgi-bin/people/educal/perl/test" METHOD="POST">
> <INPUT TYPE="hidden" NAME="domanda" VALUE=3>
> <INPUT TYPE="hidden" NAME="tipo" VALUE=1>
> <BLOCKQUOTE><FONT COLOR=#002080>
> <TABLE CELLPADDING=2>
>
> <TD><FONT SIZE=-2>1</FONT></TD><TD><INPUT TYPE="radio" NAME="risposta" VALUE="1"><tt>No - il matching non e' possibile</tt></TD><TR>
> <TD><FONT SIZE=-2>2</FONT></TD><TD><INPUT TYPE="radio" NAME="risposta" VALUE="2"><tt>X=a, Y=b, T=c.</tt></TD><TR>
> <TD><FONT SIZE=-2>3</FONT></TD><TD><INPUT TYPE="radio" NAME="risposta" VALUE="3"><tt>X=[a,b,c,d,e], Y=[], T=[].</tt></TD><TR>
> <TD><FONT SIZE=-2>4</FONT></TD><TD><INPUT TYPE="radio" NAME="risposta" VALUE="4"><tt>X=a, Y=[b], T=[c,d,e].</tt></TD><TR>
> <TD><FONT SIZE=-2>5</FONT></TD><TD><INPUT TYPE="radio" NAME="risposta" VALUE="5" CHECKED><tt>X=a, Y=[b,c,d,e], T=[].</tt></TD><TR>
> <TD COLSPAN=2>&nbsp;</TD><TR>
> <TD><FONT SIZE=-2>0</FONT></TD><TD><INPUT TYPE="radio" NAME="risposta" VALUE="0"><I>Non so</I></TD>
> </TABLE></FONT></BLOCKQUOTE>
>
> Per eventuali <B>commenti</B> potete utilizzare la finestra qui sotto:<br>
> <TEXTAREA NAME="commenti" ROWS=3 COLS=60></TEXTAREA> <P>
> </FORM>
> <P>&nbsp;<HR SIZE=6>
> <H3>Domanda N. 4</H3>
> <HR SIZE=2>
> <FONT SIZE=+1 COLOR=#008080>
> Data la definizione del predicato membro
> <pre>
> membro(X,[X|_]).
> membro(X,[_|Y]) :- membro(X,Y).
> </pre>
> Dire quali dei seguenti goal avranno successo:
>
> </FONT>
> <HR SIZE=2>
> Selezionate le vostre risposte:
> <FORM ACTION="http://attila.eng.unipr.it/cgi-bin/people/educal/perl/test" METHOD="POST">
> <INPUT TYPE="hidden" NAME="domanda" VALUE=4>
> <INPUT TYPE="hidden" NAME="tipo" VALUE=2>
> <BLOCKQUOTE><FONT COLOR=#002080>
> <TABLE CELLPADDING=2>
> <TD>&nbsp;</TD><TD ALIGN=CENTER><FONT SIZE=-2>1</FONT></TD><TD>&nbsp;</TD><TD ALIGN=CENTER><FONT SIZE=-2>2</FONT></TD><TD>&nbsp;</TD><TD ALIGN=CENTER><FONT SIZE=-2>0</FONT></TD><TR>
>
> <TD><tt>?- membro(Z,[a,b,c]).</tt></TD><TD><INPUT TYPE="radio" NAME="r1" VALUE="1" CHECKED>Vero</TD><TD>&nbsp;</TD><TD><INPUT TYPE="radio" NAME="r1" VALUE="-1">Falso</TD><TD>&nbsp;</TD><TD><INPUT TYPE="radio" NAME="r1" VALUE="0">Non so</TD><TR>
> <TD><tt>?- membro([3],[1,2,[3,4,5],6,7,8]).</tt></TD><TD><INPUT TYPE="radio" NAME="r2" VALUE="1">Vero</TD><TD>&nbsp;</TD><TD><INPUT TYPE="radio" NAME="r2" VALUE="-1" CHECKED>Falso</TD><TD>&nbsp;</TD><TD><INPUT TYPE="radio" NAME="r2" VALUE="0">Non so</TD><TR>
> <TD><tt>?- membro([3,4,5],[1,2,[3,4,5],6,7,8]).</tt></TD><TD><INPUT TYPE="radio" NAME="r3" VALUE="1" CHECKED>Vero</TD><TD>&nbsp;</TD><TD><INPUT TYPE="radio" NAME="r3" VALUE="-1">Falso</TD><TD>&nbsp;</TD><TD><INPUT TYPE="radio" NAME="r3" VALUE="0">Non so</TD><TR>
> <TD><tt>?- membro([fragole|_],[mele,pere,banane,[fragole]]).</tt></TD><TD><INPUT TYPE="radio" NAME="r4" VALUE="1" CHECKED>Vero</TD><TD>&nbsp;</TD><TD><INPUT TYPE="radio" NAME="r4" VALUE="-1">Falso</TD><TD>&nbsp;</TD><TD><INPUT TYPE="radio" NAME="r4" VALUE="0">Non so</TD><TR>
> <TD><tt>?- membro([X|_],[mele,pere,banane,[fragole]]).</tt></TD><TD><INPUT TYPE="radio" NAME="r5" VALUE="1" CHECKED>Vero</TD><TD>&nbsp;</TD><TD><INPUT TYPE="radio" NAME="r5" VALUE="-1">Falso</TD><TD>&nbsp;</TD><TD><INPUT TYPE="radio" NAME="r5" VALUE="0">Non so</TD><TR>
> <TD><tt>?- membro(X,[a,b,c,d]),membro(X,[e,f,g,h]).</tt></TD><TD><INPUT TYPE="radio" NAME="r6" VALUE="1">Vero</TD><TD>&nbsp;</TD><TD><INPUT TYPE="radio" NAME="r6" VALUE="-1" CHECKED>Falso</TD><TD>&nbsp;</TD><TD><INPUT TYPE="radio" NAME="r6" VALUE="0">Non so</TD><TR>
> <TD><tt>?- membro(X,[a,b,c]),membro([X],[a,[b,c],d]).</tt></TD><TD><INPUT TYPE="radio" NAME="r7" VALUE="1">Vero</TD><TD>&nbsp;</TD><TD><INPUT TYPE="radio" NAME="r7" VALUE="-1" CHECKED>Falso</TD><TD>&nbsp;</TD><TD><INPUT TYPE="radio" NAME="r7" VALUE="0">Non so</TD><TR>
> </TABLE></FONT></BLOCKQUOTE>
>
> Per eventuali <B>commenti</B> potete utilizzare la finestra qui sotto:<br>
> <TEXTAREA NAME="commenti" ROWS=3 COLS=60>5) X= fragole.
> 7) La parte Dx non ha successo.</TEXTAREA> <P>
> </FORM>
> <P>&nbsp;<HR SIZE=6>
> <H3>Domanda N. 5</H3>
> <HR SIZE=2>
> <FONT SIZE=+1 COLOR=#008080>
> Data la definizione del predicato conc, che concatena due liste
> <pre>
> conc([],L,L).
> conc([X|L1],L2,[X|L3]) :- conc(L1,L2,L3).
> </pre>
> Dire quale sar&agrave; il risultato della esecuzione del goal:
> <pre>
> conc([a,b,c],[],L).
> </pre>
>
> </FONT>
> <HR SIZE=2>
> Selezionate la vostra risposta:
> <FORM ACTION="http://attila.eng.unipr.it/cgi-bin/people/educal/perl/test" METHOD="POST">
> <INPUT TYPE="hidden" NAME="domanda" VALUE=5>
> <INPUT TYPE="hidden" NAME="tipo" VALUE=1>
> <BLOCKQUOTE><FONT COLOR=#002080>
> <TABLE CELLPADDING=2>
>
> <TD><FONT SIZE=-2>1</FONT></TD><TD><INPUT TYPE="radio" NAME="risposta" VALUE="1"><tt>L=[a,b,c,[]].</tt></TD><TR>
> <TD><FONT SIZE=-2>2</FONT></TD><TD><INPUT TYPE="radio" NAME="risposta" VALUE="2" CHECKED><tt>L=[a,b,c].</tt></TD><TR>
> <TD><FONT SIZE=-2>3</FONT></TD><TD><INPUT TYPE="radio" NAME="risposta" VALUE="3"><tt>L=[[],a,b,c].</tt></TD><TR>
> <TD><FONT SIZE=-2>4</FONT></TD><TD><INPUT TYPE="radio" NAME="risposta" VALUE="4"><tt>L=[].</tt></TD><TR>
> <TD><FONT SIZE=-2>5</FONT></TD><TD><INPUT TYPE="radio" NAME="risposta" VALUE="5"><tt>No. </tt></TD><TR>
> <TD COLSPAN=2>&nbsp;</TD><TR>
> <TD><FONT SIZE=-2>0</FONT></TD><TD><INPUT TYPE="radio" NAME="risposta" VALUE="0"><I>Non so</I></TD>
> </TABLE></FONT></BLOCKQUOTE>
>
> Per eventuali <B>commenti</B> potete utilizzare la finestra qui sotto:<br>
> <TEXTAREA NAME="commenti" ROWS=3 COLS=60></TEXTAREA> <P>
> </FORM>
> <P>&nbsp;<HR SIZE=6>
> <H3>Domanda N. 6</H3>
> <HR SIZE=2>
> <FONT SIZE=+1 COLOR=#008080>
> Data la definizione del predicato <tt>membro(E,L)</tt>, che ha successo se
> l'elemento <tt>E</tt> appartiene alla lista <tt>L</tt>
> <pre>
> membro(E,[E|_]).
> membro(E,[_|C]):- membro(E,C).
> </pre>
> scrivere un predicato <tt>comune(L1,L2,E)</tt> che trova un elemento
> <tt>E</tt> comune alle due liste <tt>L1</tt> e <tt>L2</tt>
> come illustrato nei seguenti esempi:
> <pre>
> ?- comune([a,b,c],[e,b,d,e],X).
> X=b
> Yes.
>
> ?- comune([a,b,c],[d,e,f]).
> No.
> </pre>
>
> </FONT>
> <HR SIZE=2>
> <FORM ACTION="http://attila.eng.unipr.it/cgi-bin/people/educal/perl/test" METHOD="POST">
> <INPUT TYPE="hidden" NAME="domanda" VALUE=6>
> <INPUT TYPE="hidden" NAME="tipo" VALUE=3>
> <BLOCKQUOTE><FONT COLOR=#002080>
> <TABLE CELLPADDING=2>
>
> </TABLE></FONT></BLOCKQUOTE>
>
> <TEXTAREA NAME="commenti" ROWS=10 COLS=60>comune(L1,L2,E):-membro(E,L1),membro(E,L2).</TEXTAREA> <P>
> </FORM>
> <P>&nbsp;<HR SIZE=6>
> <H3>Domanda N. 7</H3>
> <HR SIZE=2>
> <FONT SIZE=+1 COLOR=#008080>
> Data la definizione del predicato conc, che concatena due liste
> <pre>
> conc([],L,L).
> conc([X|L1],L2,[X|L3]) :- conc(L1,L2,L3).
> </pre>
> scrivere un predicato <tt>inverti(L1,L2)</tt>.
> Questo predicato deve generare una lista <tt>L2</tt> in cui compaiono
> gli elementi della lista <tt>L1</tt> in ordine inverso,
> come illustrato nel seguente esempio:
> <pre>
> ?- inverti([a,b,c,d],L).
> L=[d,c,b,a].
> </pre>
> <b>Suggerimento:</b>
> se la lista <tt>L1=[T|C]</tt> allora la lista <tt>L2</tt> pu&ograve; essere
> ottenuta concatenando l'inverso della coda <tt>C</tt> con la lista
> <tt>[T]</tt che contiene solo il primo elemento.
>
> </FONT>
> <HR SIZE=2>
> <FORM ACTION="http://attila.eng.unipr.it/cgi-bin/people/educal/perl/test" METHOD="POST">
> <INPUT TYPE="hidden" NAME="domanda" VALUE=7>
> <INPUT TYPE="hidden" NAME="tipo" VALUE=3>
> <BLOCKQUOTE><FONT COLOR=#002080>
> <TABLE CELLPADDING=2>
>
> </TABLE></FONT></BLOCKQUOTE>
>
> <TEXTAREA NAME="commenti" ROWS=10 COLS=60>inverti([],[]).
> inverti([H|T],L):-inverti(T,L1),conc(L1,[H],L).</TEXTAREA> <P>
> </FORM>
> <P>&nbsp;<HR SIZE=6>
> <FORM METHOD="POST" ENCTYPE="application/x-www-form-urlencoded">
> <INPUT TYPE="button" NAME="Uscita" VALUE="Uscita" ONCLICK="self.close()"></FORM><script>
> deleteCookie("cookie");
> </script>
> </BODY></HTML>
>
>

+------------------------------------+----------------------------------------+
| Dario Bianchi |
| Dipartimento di Ingegneria dell'Informazione phone +39 521 905734 |
| Universita' degli Studi di Parma fax +39 521 905723 |
| 43100 Parma - Italy E-mail bianchi@ce.unipr.it |
+------------------------------------+----------------------------------------+