.dsy:it.
Show 150 posts per page

.dsy:it. (http://www.dsy.it/forum/)
- Logica matematica (http://www.dsy.it/forum/forumdisplay.php?forumid=246)
-- Esercizio ProLog - compitino 17 giugno (http://www.dsy.it/forum/showthread.php?threadid=40664)


Posted by Paolo74GRS on 28-06-2010 09:42:

Question Esercizio ProLog - compitino 17 giugno

Ciao a tutti.. posto questo messaggio per chiedere a qualcuno di voi la risoluzione del primo esercizio del compitino di ProLog dello scorso 17 giugno... ho provato diverse volte a farlo e rifarlo ma.... gli ultimi passaggi, dove le conc dovrebbero compormi la lista L2 inversa rispetto ad L1 mi fanno perdere in un labirinto!!!

HELP!!! :?

:pensa:

:help:

..questo è il programma ed il relativo quesito:

conc([], L, L).
conc([X|L1], L2, [X|L3]):- conc(L1, L2, L3).
invers([], []).
invers([T|C], L2):- invers(C, L1), conc(L1, [T], L2).

L1=[e, f, g], invers(L1, L2).

...il risultato, testato anche con SWI-ProLog, è:

L1 = [e, f, g],
L2 = [g, f, e]

:?


Posted by Lightbreeze on 28-06-2010 12:28:

Dovrebbe essere così
la prima parte è semplice:
cambio variabili -> H=[e, f, g], invers(H, K).
regola 1 -> invers([e,f,g], K).
regola 4 -> invers( [f,g], A), conc(A, [e],K).
regola 4 -> invers([g], B), conc(B, [f], A), conc(A, [e],K).
regola 4 -> invers([], D), conc(D, [g], B), conc(B, [f], A), conc(A, [e],K).
regola 3 (D=[]) -> conc([], [g], B), conc(B, [f], A), conc(A, [e],K).
regola 1 (B=[g]) -> conc([g], [f], A), conc(A, [e],K).
ora,
regola 2 X=g, L1=[], L2=[f], A=[g|L3] -> conc([],[f],L3), conc([g|L3], [e], K).
regola 1 L3=[f] -> conc([g,f], [e], K).
regola 2 X'=g, L1'=[f], L2'=[e], K=[g|L3'] -> conc([f], [e], L3').
regola 2 X"=f, L1"=[], L2"=[e], L3'=[f|L3"] -> conc([], [e], [L3"]).
regola 1 L3"=[e] -> clausola vuota
Finito! H=[e,f,g] K=[g|L3'] = [g| [f|L3"] ] =[g|[f|[e]]]= [g,f,e]
Spero sia comprensibile :D


All times are GMT. The time now is 20:02.
Show all 2 posts from this thread on one page

Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.