Problem s ulohou v Prologu

JK
Matfyz(ák|ačka) level I
Příspěvky: 2
Registrován: 26. 1. 2007 19:49

Problem s ulohou v Prologu

Příspěvek od JK »

Ahoj,

nevite, jak se dela tohle v Prologu?

Vygenerujte vsechny soucty s celkovym souctem N
Napr. N = 5: 5 = 4 + 1 = 3 + 2 = 3 + 1 + 1 atd.

Je to urcite strasne trivialni, ale zrovna ted to zkratka nemuzu dat dohromady.

Diky moc
Návštěvník

Příspěvek od Návštěvník »

Co neco takovyho?

uprav(N, N) :- integer(N).
uprav(N, X) :- integer(N), N > 1, M is N - 1, uprav(M+1, X).
uprav(A+B, A+B).
uprav(A+B, X) :- A > 1, E is A - 1, F is B + 1, uprav(E+F, X).
uprav(A+B, C+D) :- uprav(A, C), uprav(B, D).

Ale generuje to u ruzny uzavorkovani...
Uživatelský avatar
Lukas Mach
Matfyz(ák|ačka) level III
Příspěvky: 261
Registrován: 28. 3. 2006 17:08
Typ studia: Informatika Bc.
Bydliště: Praha a Kladno
Kontaktovat uživatele:

Příspěvek od Lukas Mach »

To sem byl ja...

Oprava: generuje to _i_ ruzny
For every epsilon, there is delta.
Where is my delta?
JK
Matfyz(ák|ačka) level I
Příspěvky: 2
Registrován: 26. 1. 2007 19:49

Příspěvek od JK »

Diky za odpoved.

Takhle nejak to mam taky, jenze mam problem s tim, aby to negenerovalo dve ruzne odpovedi lisici se jen poradim scitancu (treba 3+2 a 2+3) a aby to vsechny vysledky najednou dalo samo, ne postupne po odmitani strednikem. A zavorky by tam taky nemely byt..
Veslar
Matfyz(ák|ačka) level I
Příspěvky: 19
Registrován: 20. 6. 2006 19:39

Příspěvek od Veslar »

head([],0).
head([A|_],A).

generuj2(X,X).
generuj2([X|O],Vystup):-X > 1, A is X-1, X >= A,head(O,N),N=<1, generuj2([A,1|O],Vystup).
generuj2([X,Y|O],Vystup):-X > 1, A is X-1, B is Y+1, A>=B, head(O,N),B>=N,generuj2([A,B|O],Vystup).

generuj(N,X):-generuj2([N],X).

Neco takoveho ti vyhodi seznam vsech moznych scitancu, kdyz budes mackat strednik a snad se tam ani neopakujou odpovedi. Pokud chces aby to vyhodilo naraz, tak to cele jeste zabal do predikatu bagof....
melo by to jet :]
Trouble? I call it sport.
Odpovědět

Zpět na „2006“