Ü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.
- 7548 megtekintés
Hozzászólások
csak én nem értem, hogy pontosan mit szeretne a kérdező?
karakterekre szedve = 3 6 2 8 8 0 0 pl?
- A hozzászóláshoz be kell jelentkezni
Pontosan ezt szeretném, később ezeknek az értékeknek kellene a szummája, de azt ha tudom megoldom magam. :-)
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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!
- A hozzászóláshoz be kell jelentkezni
.
- A hozzászóláshoz be kell jelentkezni
nem. ilyen álmosan már nem írok semmit.
- A hozzászóláshoz be kell jelentkezni
Esetleg kifejtenéd, hogy mi az amit rosszul gondolok?
- A hozzászóláshoz be kell jelentkezni
jajj nem, semmit, dehogy... ehh azt a paranoiás kocka fajtádat... :)
- A hozzászóláshoz be kell jelentkezni
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 hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
Köszi a segítséget, azt hiszem nem leszek prolog fanatikus :-)
- A hozzászóláshoz be kell jelentkezni