Faktoriális számítás

 ( uTibor | 2011. május 19., csütörtök - 20:37 )

Üdv,

sajnos nem nagyon értek a prologhoz, a segítségetekre lenne szükségem.

Adott egy kis kódrészlet, ami kiszámítja egy szám faktoriálisát. Ez a része rendben van, miután megjött az eredmény szeretném egy listaként bejárni, ezzel viszont sajnos nem boldogulok.

Faktoriális számítás:

fakt(0, 1).
fakt(N, F) :- N>0, N1 is N-1, fakt(N1, F1), F is N*F1.

Mondjuk 10re a következő output-t kapom.

fakt(10,L).
L = 3628800

Tehát ezt az L értéket szeretném karakterekre szedve bejárni, ha tudnátok valami kiindulási pontot adni azt megköszönném.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

csak én nem értem, hogy pontosan mit szeretne a kérdező?

karakterekre szedve = 3 6 2 8 8 0 0 pl?

Pontosan ezt szeretném, később ezeknek az értékeknek kellene a szummája, de azt ha tudom megoldom magam. :-)

Ha jol ertem, akkor L az egy szam.

Akkor ennek egyes helyiertekeit ugy a legegyszerubb megkapni, ha osztod a helyiertekkel.
Szoval az elso karaktert ugy kapod meg, hogy egesz osztast vegzel a szamon itt pl. 1000000-val.

Ha jol latom, akkor az igy nez ki prologban:
L // 1000000
L // 100000
L // 10000
...

Ui.:
Csak egy otlet, lehet rosszra gondoltam.

Jó ötlet köszi, annyit módosítanék rajta, hogy az L számra ciklikusan 10-zel történő maradékos osztást alkalmaznék, így a maradék mindig az adott helyi értékű számjegy lesz, amit már csak össze kell adnom.

Köszönöm a tippet!

.

nem. ilyen álmosan már nem írok semmit.

Esetleg kifejtenéd, hogy mi az amit rosszul gondolok?

jajj nem, semmit, dehogy... ehh azt a paranoiás kocka fajtádat... :)

Nem vettem én provokációnak/flame-nek, pusztán csak az a helyzet, hogy egyáltalán nem vagyok jártas a prologban, így bárkitől szívesen veszek ötleteket. :-)

a lényeg hogy erőlteted a c-szerűséget, _utasítást_ adsz hogy járd be, aztán meg te majd kezdesz valamit a lépésekkel, itt meg máshogy kell gondolkodni

kell az amit lehagytál, az a _kijelentés_ a lényeg hogy mi a helyzet a bejáráskor, tehát ugyanúgy ahogy ott van fakrotiálisnál:

ha a lista egyelemű (tíztől kisebb a szám) akkor meg van a válasz, ha meg nem, akkor a mod10 értékéhez lesz hozzáadva a div10-re vett ugyanilyen összeg

sum(N, S) :- N<10, S is N.
sum(N, S) :- N1 is N//10, sum(N1, S1), S is N%10+S1.

vagy valami ilyesmi

Köszi a segítséget, azt hiszem nem leszek prolog fanatikus :-)