summaryrefslogtreecommitdiff
path: root/prolog/problems/denotational_semantics/prog_listswap_3
diff options
context:
space:
mode:
Diffstat (limited to 'prolog/problems/denotational_semantics/prog_listswap_3')
-rw-r--r--prolog/problems/denotational_semantics/prog_listswap_3/common.py4
-rw-r--r--prolog/problems/denotational_semantics/prog_listswap_3/en.py29
2 files changed, 27 insertions, 6 deletions
diff --git a/prolog/problems/denotational_semantics/prog_listswap_3/common.py b/prolog/problems/denotational_semantics/prog_listswap_3/common.py
index dfa7c86..3ad93e8 100644
--- a/prolog/problems/denotational_semantics/prog_listswap_3/common.py
+++ b/prolog/problems/denotational_semantics/prog_listswap_3/common.py
@@ -1,6 +1,6 @@
id = 174
-number = 80
-visible = False
+number = 20
+visible = True
facts = 'denotational_semantics_aux__predicates'
solution = '''\
diff --git a/prolog/problems/denotational_semantics/prog_listswap_3/en.py b/prolog/problems/denotational_semantics/prog_listswap_3/en.py
index b8e9769..e275335 100644
--- a/prolog/problems/denotational_semantics/prog_listswap_3/en.py
+++ b/prolog/problems/denotational_semantics/prog_listswap_3/en.py
@@ -2,16 +2,37 @@ name = 'prog_listswap/3'
slug = 'list-manipulation language with semantics'
description = '''\
-<p>Write a DCG for manipulating list elements. The first symbol in every word is <code>[begin]</code>, followed by any sequence of "instruction" symbols from the set {<code>left</code>, <code>right</code>, <code>swap</code>}, and finally <code>[end]</code>. The starting symbol should be named <code>prog_listswap</code>.</p>
+<p>
+Write a DCG for manipulating list elements. The first symbol in every word is
+<code>[begin]</code>, followed by any sequence of "instruction" symbols from
+the set {<code>left</code>, <code>right</code>, <code>swap</code>}, and finally
+<code>[end]</code>. The starting symbol should be named
+<code>prog_listswap</code>.
+</p>
-<p>The meaning of a word (program) in this language has the form <code>In-->Out</code>, mapping from input to output lists. Besides the list contents, internal states also hold the current cursor position. The <code>left</code> and <code>right</code> instructions move the cursor one step in the given direction, while the <code>swap</code> 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).</p>
+<p>
+The meaning of a word (program) in this language has the form
+<code>In-->Out</code>, mapping from input to output lists. Besides the list
+contents, internal states also hold the current cursor position. The
+<code>left</code> and <code>right</code> instructions move the cursor one step
+in the given direction, while the <code>swap</code> 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).
+</p>
<pre>
?- prog_listswap([1,2,3,4]-->Out, [begin,right,swap,end], []).
Out = [2,1,3,4].
</pre>
-<p>Helper predicate (already defined):<br />
-&nbsp;&nbsp;<code>swap(List,I,NewList)</code> creates <code>NewList</code> by swapping the <code>I</code>th element with its left neighbor in <code>List</code></p>'''
+<p>
+Helper predicates (already defined):
+</p>
+<ul>
+<li><code>swap(List,I,NewList)</code> creates <code>NewList</code> by
+swapping the <code>I</code>th element with its left neighbor in
+<code>List</code></li>
+</ul>
+'''
hint = {}