Give a definition for a predicate function Reversed(b, i, j, m) that is true iff
ID: 668951 • Letter: G
Question
Give a definition for a predicate function Reversed(b, i, j, m) that is true iff the segment b[i..i+m-1] is the reverse of the segment b[j..j +m-1]. E.g., if b = (1, 2, 3, 4, 5, 4, 5, 4, 3, 2, 6), then
Reversed(b, 1, 6, 4) is true
Reversed(b, 7, 2, 2) is true
Reversed(b, 5, 5, 1) is true
Reversed(b, 3, 5, 3) is true
Reversed(b, 0, 7, 2) is false If m 0, then the two segments are empty and Reversed should be true. (Depending on how you write your definition, this might need to be a special case.) If m > 0 then every index in the two segments must be legal ( 0 and < size(b)) for Reversed to be true. Your definition can be recursive or non-recursive, your choice. Remember, this is supposed to be a predicate function, so its definition must be a predicate, not a program. E.g.,
OK: Reversed(b, i, j, m) m > 0 etc.BAD: Reversed(b, i, j, m) if(m > 0) return 1; else...
Explanation / Answer
Reversed(_,X,X,_) :- !.
Reversed(_,_,_,0) :- !.
Reversed(L,i,j,m) :- GetElementAtPosition(L,i,E), X is j+m, GetElementAtPosition(L,X,E2), E=E2, DeletePosition(i,L,L1), DeletePosition(j+m-1,L1,L2), Reversed(L2,i,j,m-1).
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.