Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

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).

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote