<div class="notebook"> <div class="nb-cell markdown" name="md1"> ## Example 1 Write a predicate `sum(X,S)` that is true when `S` is the sum of the elements of list `X`. </div> <div class="nb-cell program" name="p1"> len([],0). len([_|T], S) :- len(T,S1), S is S1 + 1. sum([],0). sum([H|T], S) :- sum(T,S1), S is S1 + H. </div> <div class="nb-cell query" data-tabled="true" name="q1"> sum([],S) </div> <div class="nb-cell query" data-tabled="true" name="q2"> sum([1,2,3,4,5],S) </div> <div class="nb-cell html" name="htm1"> </div> <div class="nb-cell markdown" name="md2"> ## Problem 1 Write the predicate `prod(X,S)` that is true when `S` is the product of the elements of `X`. </div> <div class="nb-cell program" name="p2"> prod([],1). prod([H|T],P) :- prod(T,P1), P is P1 * H. </div> <div class="nb-cell query" data-tabled="true" name="q3"> prod([],P). </div> <div class="nb-cell query" data-tabled="true" name="q4"> prod([2,3,4,5,6],P). </div> <div class="nb-cell markdown" name="md3"> ## Problem 2 Create a preedicate `append(X,Y,Z)` that is true when `Z` is the result of appending lists `X` and `Y`. </div> <div class="nb-cell program" name="p3"> append([],Z,Z). append([H|T],Y,[H|Z]) :- append(T,Y,Z). </div> <div class="nb-cell query" data-tabled="true" name="q5"> append([],[],Z). </div> <div class="nb-cell query" data-tabled="true" name="q6"> append([1,2,3],[],Z) </div> <div class="nb-cell query" data-tabled="true" name="q10"> append([],[3,5,7],S). </div> <div class="nb-cell query" data-tabled="true" name="q7"> append([8,6,7],[5,3,0,9],Z). </div> <div class="nb-cell markdown" name="md4"> ## Problem 3 Write a predicate `isprefix(X,Z)` that is true when `X` is a prefix of `Z`. </div> <div class="nb-cell program" name="p4"> /* Copy append code here */ isprefix(X,Z) :- append(X,_,Z). </div> <div class="nb-cell query" data-tabled="true" name="q8"> isprefix([1,2],[1,2,3,4,5]). </div> <div class="nb-cell query" data-tabled="true" name="q9"> isprefix([3,4],[1,2,3,4,5]). </div> </div>