From 1b2c914d8552f4af1676f6b63203513d949c7817 Mon Sep 17 00:00:00 2001 From: Aleksander Sadikov Date: Thu, 1 Sep 2016 18:36:34 +0200 Subject: English translation for shiftright/2 added. --- prolog/problems/lists_advanced/shiftright_2/en.py | 66 ++++++++++++++++++++++- prolog/problems/lists_advanced/shiftright_2/sl.py | 2 +- 2 files changed, 66 insertions(+), 2 deletions(-) diff --git a/prolog/problems/lists_advanced/shiftright_2/en.py b/prolog/problems/lists_advanced/shiftright_2/en.py index 4e0fec3..21b404d 100644 --- a/prolog/problems/lists_advanced/shiftright_2/en.py +++ b/prolog/problems/lists_advanced/shiftright_2/en.py @@ -8,4 +8,68 @@ description = '''\ X = [5,1,2,3,4]. ''' -hint = {} +plan = ['''\ +

I take the last element from the given list and add it back at the start of the list's remainder. +You probably still remember how we took the last element of the list? And adding an element at the start +is quite simple, isn't it?

+''', '''\ +

A list of length one is represented as a pattern [X]. This might come in handy, as well +as the predicate conc/3.

+''', '''\ +

If the given list L is composed of last element E and the remainder L1, +and if we put E at the start of L1, then we get list L +shifted right.

+'''] + +hint = { + 'eq_instead_of_equ': '''\ +

The operator == is "stricter" than operator = in the sense that +for the latter it is enough to be able to make the two operands equal (unification). Perhaps by using = +you can make the predicate shiftleft/2 more general (e.g. able to work with output arguments becoming inputs).

+

Of course, you can also solve the exercise without explicit use of either of these two operators, just +remember that unification is implicitly performed with the predicate's arguments (head of clause).

+''', + + 'eq_instead_of_equ_markup': '''\ +

Perhaps the operator for unification (=) would be better?

+''', + + 'predicate_always_false': '''\ +

It seems your predicate is always "false". Did you give it the correct name, +or is it perhaps misspelled?

+

If the name is correct, check whether something else is misspelled, perhaps there is a full stop instead of +a comma or vice versa, or maybe you typed a variable name in lowercase?

+

It is, of course, also possible that your conditions are too restrictive, or even impossible to satisfy +(as would be, for example, the condition that N is equal to N + 1, +or something similarly impossible).

+''', + + 'timeout': '''\ +

Is there an infinite recursion at work here? How will it ever stop?

+

Or perhaps is there a missing, faulty, or simply incompatible (with the general recursive case) base case?

+''', + +'conc_2nd_argument_not_1elem_list': '''\ +

Do you remember how the "pattern" representing a list with exactly one element looks like? Not like +the second argument you gave to predicate conc/3. ;)

''', + + 'arbitrary_result': '''\ +

Did you connect (use) all the variables? It seems as if you're returning an arbitrary result +(a variable without an assigned value). It's usually not a good idea to ignore the warning about +"singleton variables".

+''', + +'shiftleftish_solution': '''\ +

The tail of the list is always another list and never just an element. How did you get the last +element? This will not work...

''', + +'last_used': '''\ +

By using predicate last/2 it will be difficult to solve this exercise as it leaves the last +element in the original list. Rather try using predicate conc/3 instead.

''', + +'final_hint': '''\ +

Predicates shiftleft/2 and shiftright/2 perform exactly the opposite function. +If you simply swap the order of their arguments, you get the other predicate. In this way you could +program shiftright/2 just by calling shiftleft/2. You know that in prolog inputs +and outputs can often be interchanged.

''', +} diff --git a/prolog/problems/lists_advanced/shiftright_2/sl.py b/prolog/problems/lists_advanced/shiftright_2/sl.py index ce9b9fa..784f4ed 100644 --- a/prolog/problems/lists_advanced/shiftright_2/sl.py +++ b/prolog/problems/lists_advanced/shiftright_2/sl.py @@ -24,7 +24,7 @@ hint = { 'eq_instead_of_equ': '''\

Operator == je strožji od operatorja = v smislu, da je za slednjega dovolj, da elementa lahko naredi enaka (unifikacija). Morda z uporabo = narediš predikat -memb/2 delujoč tudi v kakšni drugi smeri.

+shiftright/2 delujoč tudi v kakšni drugi smeri.

Seveda pa lahko nalogo rešiš brez obeh omenjenih operatorjev, spomni se, da lahko unifikacijo narediš implicitno že kar v argumentih predikata (glavi stavka).

''', -- cgit v1.2.1