Reverse a List in Logic
This problem uses the Logic starter file located here.
Write facts to define
reverse. You may use anything already included in the starter file as well as other facts defined in previous questions.
reverse relates two lists with the second being the reversed of the first.
(fact (reverse ; YOUR CODE HERE )) (query (reverse (1 2 3) (3 2 1))) ; expect Success! (query (reverse (1 2 3) ?what)) ; expect Success! ; what: (3 2 1)
(fact (reverse () ())) (fact (reverse (?first . ?rest) ?result) (reverse ?rest ?new-rest) (append ?new-rest (?first) ?result))
We start with the base case. The reverse of the empty list is the empty list.
Moving on to the recursive case, we split up the original list into
rest. From there, we need to find the
reverse of the
rest, store that as a new value, in this case
new-rest, and then appending
first to the end of
new-rest to get the
result that we originally wanted.
I don't claim to be perfect so if you find an error on this page, please send me an email preferably with a link to this page so that I know what I need to fix!