játékfejlesztés.hu
FórumGarázsprojectekCikkekSegédletekJf.hu versenyekKapcsolatokEgyebek
Legaktívabb fórumozók:
Asylum:    5440
FZoli:    4892
Kuz:    4455
gaborlabor:    4449
kicsy:    4304
TPG:    3402
monostoria:    3284
DMG:    3172
HomeGnome:    2919
Matzi:    2519

Pretender:    2498
szeki:    2440
Seeting:    2306
Geri:    2185
Orphy:    1893
Joga:    1791
Bacce:    1783
MaNiAc:    1735
ddbwo:    1625
syam:    1491
> 1 <
WToma - Szerkesztő | 635 hsz       Online status #118953   2009.10.09 14:35 GMT+1 óra  
Ez a prolog szerintem nem valami gyors, legalábbis abból a végrehajtási mechanizmusból ítélve, amit nekünk tanítottak. Viszont valamelyik másik nyelvet (talán CAML) állítólag robotok irányítására is használják, ahol viszont hard realtime követelmények vannak. (Szerk.: és nemcsak hard realtime, hanem a rendelkezésre álló idő is elég kicsi.)
Ez nem bug, hanem feature!
http://sohivatal.uw.hu
   
2SD - Tag | 463 hsz       Online status #118952   2009.10.09 14:32 GMT+1 óra  
értem, köszönöm a válaszokat. - az MMF is így működik nagyrészt egyébként(néhány dolgot leszámítva, amiket kattintgatással is elérhetsz), szóval nem volt annyira ismeretlen, csak éppen nem tudtam, hogy ez is nagyon hasonló. Sebességre ez milyen amúgy? Meg mivel érdemes összehasonlítani egyáltalán?
C4Ninja
   
Matzi - Szerkesztő | 2519 hsz       Online status #118950   2009.10.09 14:20 GMT+1 óra  
Az idézetből kimaradt egy link, ami fontos.

8 királynő

A lényegi rész mindössze ennyi: ( % a comment jele)
Kód:
nocheck(_,[]).
nocheck(X/Y, [X1/Y1 | Rest]) :- X=\=X1,Y=\=Y1,
                                abs(Y1-Y) =\= abs(X1-X),
                                nocheck(X/Y,Rest).

legal([]).
legal([X/Y | Rest]) :-
    legal( Rest),
    member(X,[1,2,3,4,5,6,7,8]),
    nocheck(X/Y,Rest).


nocheck(_,[]). -> ez azt jelenti, hogy a nocheck (nem fenyegetik egymást a királynők) kijelentés igaz bármilyen elemre, ha egy üres lista van mellette. Az _ a bármi, a [] az üres lista. Mindig a megfelelő predikátumot illeszti (akár többet is megpróbálhat, hogy kihozza az eredményt), ezt akkor fogja illeszteni, ha a lista kifogyott.
A másik nocheck azt mondja, hogy egy X/Y párosra (királynő pozíciója) akkor lehet igaz, ha azok nem ütik a soron következő királynőt, valamint az összes többit sem. Jól látszik a rekurzió.
A prolog listakezelése úgy működik, hogy van a listának feje és farka, a fej egy elem, a farok a többi. Egyszerre több fejet is meghatározhatunk.
üres lista: []
egy elemű lista: [fej]
egy egy legalább egy elemű lista [fej | farok]
legalább két elemű: [fej1 | fej2 | farok]

A legal az üres listára mindenképpen igaz.
Illetve akkor igaz, ha az első elemre igaz a nocheck, az X 1-8 közé esik, valamint a többi elemre is igaz. Itt is el fog fogyni a lista, és a végén üres listára igaz lesz.

A trükk, hogy a következtetés akkor történik, amikor megkérdezzük, hogy mondjon egy olyan X listát, aminek az elemeire igaz a fenti állítás. A nem beidézett kódban szépen kitöltögeti az Y értékeket (arra nem volt megkötés, de tudjuk, hogy minden sorba kerül királynő, így adhatunk neki olyan listát, ahová csak X-et kell neki találnia), és erre a listára kéri az X értékeket, ráadásul az összeset. Alapból egyet mondana, és kérésre többet is.

De írok egyszerűbb saját példát, rokonság:
Kód:
Apa("Sanyi","Józsi").  % Sanyi apja Józsi
Apa("Feri","Sanyi"). % Feri apja Sanyi
Apa("Géza","Sanyi").  % Géza apja Sanyi
Nagyapa(A,B):- Apa(A,X), Apa(X,B). % A akkor nagyapja B-nek, ha van egy X, aki B apja, és akinek A az apja
Testver(A,B):- Apa(A,X), Apa(B,X). % akkor testvérek, ha közös az apjuk

Az első három azok alap igazságok, a másik kettő pedig általános szabályok. ennél összetettebbek is lehetnek, de már itt is látszik, hogy egy olyan parancsra, hogy Apa(X,"Sanyi". két klóz is illeszkedik, és X értékének két végeredményt is adhat.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
   
Asylum - Törzstag | 5440 hsz       Online status #118946   2009.10.09 13:50 GMT+1 óra  
Lényegében arrol van szo, hogy a programodat logikai formulákkal fogalmazod meg.
Most csak clipses példát tudok mondani (igen az a ronda).

Kód:
(defrule kerdezmilyen "Milyen gepet akar"
  ?f <- (milyen ures)
=>
  (retract ?f)
  (printout t crlf)
  (printout t "Asztali vagy hordozhato gepet szeretnel? (asztal,hordoz)")
  (printout t crlf)
  (bind ?milyen_ertek (read))
  (assert (milyen ?milyen_ertek))
)


Mivel a hihetelenül ocsmány szintaxis miatt nemtudtam megcsinálni a keresztrejtvény megoldó progit, ezért csináltam ilyen bugyuta milyen szgépet akarsz venni cuccot. Ebbe semmi marhaság nemkell.
Ez a clips konkrétan valami olyasmi, hogy vannak tények és vannak szabályok, aztán ezekböl szabályalapu következtetéssel kihoz valamit (megnemmondom hogy elöre vagy visszafele halado, de asszem vissza).
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
WToma - Szerkesztő | 635 hsz       Online status #118945   2009.10.09 13:44 GMT+1 óra  
A barátom azt mondta, kérdezzem meg a barátnőmet, és ő ezt mondta: http://en.wikipedia.org/wiki/Declarative_programming

Szerk: egy teljesen triviális példa, ami csak az alaplogikát mutatja:
Kód:
jftag(kettoSD).
jftag(wtoma).
jftag(matzi).

level(kettoSD, 1).
level(wtoma, 42).
level(matzi, 1).

jfmodi(X) :-
jftag(X),
level(X, A),
A > 40.


Ezután megkérdezzük, hogy: jfmodi(wtoma). mire közli, hogy 'yes', vagy jfmodi(kettosd) amire azt mondja, hogy 'no'. De azt is kérdezhetjük, hogy jftag(X), mire fölsorolja, hogy kik a JF tagok. (Azt a hármat, akit fölírtam).

Ezt a hozzászólást WToma módosította (2009.10.09 13:52 GMT+1 óra, ---)
Ez nem bug, hanem feature!
http://sohivatal.uw.hu
   
2SD - Tag | 463 hsz       Online status #118944   2009.10.09 13:30 GMT+1 óra  
Megmondom őszintén, életemben nem hallottam erről. Tulajdonképpen miről is van szó, és hogy épül fel ez a.. <az amiről szó van> - azt leszámítva, hogy 'nem azt mondod meg, hogy hogyan csinálja, hanem hogy mit csináljon.' Esetleg konkrét példával. [valami olyasmivel lehetőleg, amit az olyan seggfejek is megértenek, mint pl jómagam.]
C4Ninja
   
WToma - Szerkesztő | 635 hsz       Online status #118943   2009.10.09 13:12 GMT+1 óra  
Matzi

Akkor nem megfelelő az előadó. Mondjuk baromi nehéz értelmes és megoldható méretű feladatokat adni. Más programnyelveken is gond van ezzel (pl nálunk a féléves projektek röhej kategóriásak voltak), a prologot meg még kevesebb területen lehet használni, de ott jól.

Egy egyszerűbb példának egy egyszerű 8 királynő probléma. Ez a kiírás részt leszámítva baromi rövid, kb 15 sor, és akárhány királynőre gond nélkül lefut. Ezt próbáld meg C-ben megírni ennyi sorból. Valamint megjegyezném, hogy nálunk ennél bonyolultabb feladatokat kellett háziként megoldani.

Nyilván ezt is procedurális nyelven írták, szóval minden megoldható Cben is, ami prologban, de azért nem mindegy milyen gyorsan és jól. Ráadásul ez elég univerzális. Van nálunk egy tárgy, az a címe, hogy nagy hatékonyságú logikai programozás, ahol még pár hatékonyabb eszközt meg lehetett ismerni. Mondjuk nem végeztem el, de érdekesnek hangzik.

Ez nem bug, hanem feature!
http://sohivatal.uw.hu
   
WToma - Szerkesztő | 635 hsz       Online status #118942   2009.10.09 13:10 GMT+1 óra  
Prolog, Haskell, Erlang, és társaik...

A gumiszobában nagy sikere volt
Ez nem bug, hanem feature!
http://sohivatal.uw.hu
   
> 1 <