name = 'prog_listswap/3' slug = 'jezik za rokovanje s seznami s pomenom' description = '''\
Napiši DCG za rokovanje s seznami. Prvi simbol vsake besede je [begin]
, temu pa sledi
poljubno zaporedje "ukazov" iz nabora {left
, right
, swap
},
na koncu pa je simbol [end]
. Začetni nekončni simbol naj se imenuje prog_listswap
.
Pomen besede (programa) v tem jeziku ima obliko In-->Out
in pomeni preslikavo
med vhodnim seznamom In
in izhodnim seznamom Out
. Notranje stanje
gramatike, hranjeno v argumentih nekončnih simbolov, poleg trenutnega stanja seznama vodi tudi
pozicijo kurzorja s katerim rokujemo s seznamom. Ukaza left
in right
kurzor premakneta za eno mesto v ustrezno smer, ukaz swap
pa zamenja mesti elementov
med katerima stoji kurzor. Če je kurzor na začetku seznama, ukaz swap
ne uspe.
?- prog_listswap([1,2,3,4]-->Out, [begin,right,swap,end], []). Out = [2,1,3,4].
Pomožni predikat (že definiran):
swap(List,I,NewList)
ustvari nov seznam NewList
tako, da
zamenja mesti I
-tega elementa in njegovega levega soseda v seznamu
List
Ta naloga je že rešena. Preveri kako deluje v konzoli.
''' hint = {}