[Prolog] Pomoc oko nekoliko zadataka

tzred

Početnik
Poruka
1
Imam nekoliko zadataka,pa bih bio veoma zahvalan kad bi mi pomogli oko resavanja .....

1.Definirati predikat dodaj/2,čiji je prvi argumenat lista celih brojeva,a drugi argumenat je lista celih brojeva koja se dobija uvećanjem elemenata prve liste za 1,npr.:

?-dodaj([3,2,5,10],X).
X=[4,3,6,11].


2.Definirati predikat dupliraj/2,čiji je prvi argumenat ulazna lista,a drugi argumenat je lista koja se dobije dupliranjem elemenata ulazne liste ,npr.:

?-dupliraj([3,student,vincent],X).
X=[3,3,student,student,vincent,vincent].

3.Napisati pravilo koje računa sumu liste,te onda pravilo koje pronalazi najveći član u listi.Primjer:

?-sumaliste([11,2,3,4],A).

A=20.
Yes
?-maxl([11,2,3,4],B).

B=11.
Yes

Hvala unapred!!
 
samo objasni sta su ti predikati.

Kod:
[COLOR="Blue"]unsigned char[/COLOR] * Dupliraj ([COLOR="blue"]unsigned char[/COLOR] * stkLista, [COLOR="blue"]unsigned short[/COLOR] stkDuzinaListe)
{
    [COLOR="blue"]unsigned short[/COLOR] localDuzinaDupliciraneListe = stkDuzinaListe * 2; [COLOR="SeaGreen"]//Posto je duplirana lista duplo duza, zna se...[/COLOR]
    [COLOR="blue"]unsigned char[/COLOR] * localDupliciranaLista = malloc (localDuzinaDupliciraneListe); [COLOR="seagreen"]//Obezbedjuje memoriju za dupliranu listu.[/COLOR]
    [COLOR="blue"]unsigned short[/COLOR] i = stkDuzinaListe; [COLOR="seagreen"]//Iterator. Mada brze radi ako stavis int u 32bitnim sistemima.[/COLOR]
    [COLOR="blue"]for[/COLOR] (; i > 0; i--) [COLOR="seagreen"]//Na Intel(R) IA-32 familije procesorima zapravo postoje samo opadajuce petlje. Radi orijentacije pravi takve.[/COLOR]
    {
        *localDupliciranaLista = *stkLista; [COLOR="seagreen"]//'*' ispred 'pokazivac' daje ono na sta pokazuje pokazivac, i taj tip podataka, iliti upravlja sa tim na sta pokazuje pokazivac.[/COLOR]
        localDupliciranaLista ++; [COLOR="seagreen"]//Pomera pokazivac unapred, kako bi isti sada upravljao sa sledecim podatkom u nizu. Ovde unsigned char (tj. BYTE (0 - 255)).[/COLOR]
        *localDupliciranaLista = *stkLista; [COLOR="seagreen"]//Dodaje isti clan iz niza stkLista i u ovo mesto u localDupliciranaLista, kako bi ti dobio ono sto si trazio.[/COLOR]
        localDupliciranaLista ++; [COLOR="seagreen"]//Priprema za [/COLOR]
        stkLista ++;              [COLOR="seagreen"]//    slececu iteraciju.[/COLOR]
    }
    localDupliciranaLista -= localDuzinaDupliciraneListe; [COLOR="seagreen"]//Vraca pokazivac na prvi elemenat niza.[/COLOR]
    stkLista -= stkDuzinaListe; [COLOR="seagreen"]//Isto to.[/COLOR]
    [COLOR="blue"]return[/COLOR] localDupliciranaLista; [COLOR="SeaGreen"]//Vraca rezultat funkcije na stack.:)[/COLOR]
}
ovo ti je najjednostavnije, al mogu ti napisati i za "niz reci' ako ti treba.
 
Poslednja izmena:

Back
Top