Skip to content

Instantly share code, notes, and snippets.

@vbalazs
Created May 8, 2013 00:24
Show Gist options
  • Save vbalazs/5537294 to your computer and use it in GitHub Desktop.
Save vbalazs/5537294 to your computer and use it in GitHub Desktop.
Deklaratív programozás nagyzárthelyi, 2005. május 35., Prolog, 4. feladat Bármennyire is utálatos nyelv a prolog, ez azért elég epic. Elmentem ezt emlékeztetőnek, hogy azért lehet(ne) szeretni.
4. Egy számlistában csúcsnak hívunk három szomszédos
elemet, ha az elsõ és a harmadik kisebb a másodiknál.
Írjon olyan Prolog eljárást csucsa néven, amely balról jobbra haladva
felsorolja egy számlistában levõ csúcsokat! A három szomszédos elemet
egy cs/3 funktorú struktúraként adja vissza! Segédeljárást nem
definiálhat.
% csucsa(+L, -Cs): Cs egy cs/3 funktorú struktúra, amely az L számlistában
% levõ csúcsot ír le. L bemenõ, Cs kimenõ paraméter.
| ?- csucsa([1,2,3], Cs). => no
| ?- csucsa([1,2,3,1,4,2], Cs). => Cs = cs(2,3,1) ? ; Cs = cs(1,4,2) ? ; no
| ?- csucsa([1,2,3,-3,2,1,0,2,7,5,8,9,1], Cs).
=> Cs = cs(2,3,-3) ? ; Cs = cs(-3,2,1) ? ;
Cs = cs(2,7,5) ? ; Cs = cs(8,9,1) ? ; no
Egy megoldás:
csucsa([X,Y,Z|_L], cs(X,Y,Z)) :-
Y > X, Y > Z.
csucsa([_|L], Cs) :-
csucsa(L, Cs).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment