From 878daf66ab9c6257c0ef7e677e6c444813efca85 Mon Sep 17 00:00:00 2001
From: Aleksander Sadikov I take the first element of a list, let's call it A list of length one is represented as a pattern If the given list The operator 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). Perhaps the operator for unification (=) would be better? It seems your predicate is 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 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? All three arguments of predicate 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". The list's tail is always another list and never an element! Operator H
, and add it at the end of
+the list's remainder (let's call the remainder T
). As simple as that! You probably still
+remember how we took the last element of the list? Adding an element is the same operation as taking it,
+just from the opposite view ;)[X]
. This might come in handy, as well
+as the predicate conc/3
.L
is composed of head H
and tail T
, and if
+we add H
at the end of T
, then we get list L
+shifted left.==
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).N
is equal to N + 1
,
+or something similarly impossible).conc/3
are lists.
+Are you sure you used it properly?==
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.shiftleft/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