Problem s ulohou v Prologu

Odeslat odpověď

Smajlíci
:D :) :( :o :shock: :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode je zapnutý
[img] je zapnutý
[flash] je vypnutý
[url] je zapnuté
Smajlíci jsou zapnutí

Přehled tématu
   

Rozšířit náhled Přehled tématu: Problem s ulohou v Prologu

od Veslar » 27. 1. 2007 19:23

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 :]

od JK » 26. 1. 2007 21:12

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..

od Lukas Mach » 26. 1. 2007 20:37

To sem byl ja...

Oprava: generuje to _i_ ruzny

od Návštěvník » 26. 1. 2007 20:37

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...

Problem s ulohou v Prologu

od JK » 26. 1. 2007 19:50

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

Nahoru