name = 'prog_listswap/3' slug = 'list-manipulation language with semantics' description = '''\

Write a DCG for manipulating list elements. The first symbol in every word is [begin], followed by any sequence of "instruction" symbols from the set {left, right, swap}, and finally [end]. The starting symbol should be named prog_listswap.

The meaning of a word (program) in this language has the form In-->Out, mapping from input to output lists. Besides the list contents, internal states also hold the current cursor position. The left and right instructions move the cursor one step in the given direction, while the swap instruction swaps the element under the cursor with its left neighbor (and fails if cursor is currently pointing to the first element of the list).

?- prog_listswap([1,2,3,4]-->Out, [begin,right,swap,end], []).
  Out = [2,1,3,4].

Helper predicate (already defined):
  swap(List,I,NewList) creates NewList by swapping the Ith element with its left neighbor in List

''' hint = {}