<div class="notebook"> <div class="nb-cell markdown" name="md1"> # Aggregation in sCASP </div> <div class="nb-cell program" data-background="true" name="p1"> :- use_module(library(scasp)). % Uncomment to suppress warnings %:- style_check(-discontiguous). %:- style_check(-singleton). %:- set_prolog_flag(scasp_unknown, fail). </div> <div class="nb-cell markdown" name="md2"> Sumlist works as expected. </div> <div class="nb-cell program" name="p2"> sum(X) :- sum_list([1,2,3,4,5],X). </div> <div class="nb-cell query" name="q1"> ? sum(X). </div> <div class="nb-cell markdown" name="md3"> Length does not, saying that there is no permission to var. </div> <div class="nb-cell program" name="p3"> len(X) :- length([1,2,3,4,5],X). </div> <div class="nb-cell query" name="q2"> ? len(X). </div> <div class="nb-cell query" name="q5"> len(X). </div> <div class="nb-cell markdown" name="md4"> Bagof also does not seem to work, giving no permission to bagof. </div> <div class="nb-cell program" name="p4"> person(a). person(b). list(X) :- bagof(P,person(P),X). </div> <div class="nb-cell query" name="q14"> ? findall(P,person(P),L). </div> <div class="nb-cell query" name="q3"> ? list(X). </div> <div class="nb-cell query" name="q4"> list(X). </div> <div class="nb-cell program" name="p5"> my_length([],0). my_length([_|[]],1). my_length([_|T],L) :- my_length(T,Tlen), L #= 1 + Tlen. </div> <div class="nb-cell query" name="q6"> ? my_length([1,2,3,4,5],X). </div> <div class="nb-cell query" name="q17"> ? my_length(L,3). </div> <div class="nb-cell program" name="p6"> my_test(X) :- call(X). </div> <div class="nb-cell query" name="q7"> ? my_test(A = 1). </div> <div class="nb-cell program" name="p7"> my_append([],V,[V]). my_append([H|[]],V,[H,V]). my_append([H|T],V,[H|New]) :- my_append(T,V,New). </div> <div class="nb-cell query" name="q8"> ? append([1,2],3,X), X = [1,2|3]. </div> <div class="nb-cell query" name="q10"> ? my_append([],start,X). </div> <div class="nb-cell query" name="q11"> ? my_append([start],middle,X). </div> <div class="nb-cell query" name="q9"> ? my_append([1,2],3,X). </div> <div class="nb-cell markdown" name="md5"> Member works. </div> <div class="nb-cell query" name="q12"> ? member(3,[1,2,3]). </div> <div class="nb-cell query" name="q13"> ? not member(4,[1,2,3]). </div> <div class="nb-cell program" name="p9"> -my_member(_,[]). my_member(H,[H|_]). my_member(X,[_|Tail]) :- my_member(X,Tail). </div> <div class="nb-cell query" name="q18"> ? my_member(2,[]). </div> <div class="nb-cell query" name="q19"> ? my_member(1,[1]). </div> <div class="nb-cell query" name="q20"> ? my_member(2,[1,2,3]). </div> <div class="nb-cell query" name="q21"> ? my_member(3,[1,2,3]). </div> <div class="nb-cell program" name="p8"> blawx_category(person). blawx_category(person,jane). blawx_category(person,bob). blawx_category(person,june). object(jane). object(bob). object(june). %-my_member(_,_,[]). my_member(Category,H,[H|_]) :- blawx_category(Category), object(H), blawx_category(Category,H). my_member(Category,X,[_|T]) :- blawx_category(Category), object(X), blawx_category(Category,X), my_member(Category,X,T). my_people([X|[]]) :- blawx_category(person), blawx_category(person,X). my_people([X|Others]) :- my_people(Others), object(X), blawx_category(person,X), not my_member(person,X,Others). % A list of people is a person, followed by an empty list. %my_people([X|[]]) :- % person(X). %person_member_of(X,Others):- % person(X), % member(X,Others). % A list of people is a person, followed by a list of people who are not that person. %my_people([X|Others]) :- % my_people(Others), % not person_member_of(X,Others). </div> <div class="nb-cell query" name="q15"> ? my_people(X). </div> <div class="nb-cell program" name="p10"> my_length([],0). my_length([_|T],L) :- my_length(T,Tlen), L #= 1 + Tlen. blawx_category(person,jason). another(Category,Item,List,NewList) :- blawx_category(Category,Item), not member(Item,List), NewList = [Item|List]. nomore(Category,_,List,List) :- not another(Category,_,List,_). </div> <div class="nb-cell query" name="q16"> ? nomore(person,X,[],Y). </div> <div class="nb-cell program" name="p11"> mycount(Pred,0) :- not blawx_category(Pred,_). </div> <div class="nb-cell query" name="q22"> </div> </div>