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 predicates (already defined):
swap(List,I,NewList)
creates NewList
by
swapping the I
th element with its left neighbor in
List
This exercise has already been solved for you. Check how it works in the console.
''' hint = {}