/* Test of predicates in listut_v3.piin Picat. This is a test of the predicates in listut.pl http://www.picat-lang.org/bprolog/publib/listut.html """ % File : LISTUT.PL % Author : Bob Welham, Lawrence Byrd, and R.A.O'Keefe % Converted to NIP: K Johnson, 11.8.87 % Updated: 12 February 1985 % Purpose: list processing utilities """ This program was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ import listut_v3. main => go. /* Output: correspond = [[1,a]] delete = [1,2,3,5,6,7,8,9,10] last = 5 nmember = [[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10]] nmembers = cea nth0 = [[0,1]] nth1 = [[1,1]] nth0/4 = [[0,1,[2,3,4,5,6,7,8,9,10]]] nth1/4 = [[1,1,[2,3,4,5,6,7,8,9,10]]] numlist = [1,2,3,4,5,6,7,8,9,10] perm = [[[1,2,3]],[[1,3,2]],[[2,1,3]],[[2,3,1]],[[3,1,2]],[[3,2,1]]] perm2 = [ab,ba] remove_dups = [3,4,a,b,e,f] remove_dups/1 = [a,b,3,4,e,f] rev = knakah reverse = knakah same_length = ok same_length = ok select = [[1,[3,2,3,4]],[2,[1,3,3,4]],[3,[1,2,3,4]],[4,[1,2,3,3]]] shorter_list = ok shorter_list = ok shorter_list = ok subseq = [[[],[1,2,3]],[[3],[1,2]],[[2],[1,3]],[[2,3],[1]],[[1],[2,3]],[[1,3],[2]],[[1,2],[3]],[[1,2,3],[]]] subseq = [1,4,5] subseq0 = [[1,2,3],[2,3],[3],[],[2],[1,3],[1],[1,2]] subseq1 = [[2,3],[3],[],[2],[1,3],[1],[1,2]] sumlist = 524800 */ go => % correspond/4 % Note: correspond/4 has a cut ('!') so here we only get the first occurrence Correspond = findall([CorrespondX,CorrespondY], correspond(CorrespondX,[1,2,3,4],[a,b,c,d],CorrespondY)), println(correspond=Correspond), % delete/4 delete(1..10,4,DeleteResidue), println(delete=DeleteResidue), % last/2 % Picat has Last = last(List) last(Last,[1,2,3,4,5]), println(last=Last), % nmember/3 NMember=findall([NMemberElem,NMemberIndex],nmember(NMemberElem,1..10,NMemberIndex)), println(nmember=NMember), % nmembers/3 nmembers([3,5,1], [a,b,c,d,e,f,g,h], NMembers), println(nmembers=NMembers), % nth0/3 % nth0/3 has a cut and thus only shows one result Nth0 = findall([Nth0Ix,Nth0Elem],nth0(Nth0Ix,1..10,Nth0Elem)), println(nth0=Nth0), % nth1/3 % nth1/3 has a cut and thus only shows one result Nth1 = findall([Nth1Ix,Nth1Elem],nth1(Nth1Ix,1..10,Nth1Elem)), println(nth1=Nth1), % nth0/4 % nth0/4 has a cut and thus only shows one result Nth0_4 = findall([Nth0Ix,Nth0Elem,Nth0Rest],nth0(Nth0Ix,1..10,Nth0Elem,Nth0Rest)), println('nth0/4'=Nth0_4), % nth1/4 % nth1/4 has a cut and thus only shows one result Nth1_4 = findall([Nth1Ix,Nth1Elem,Nth1Rest],nth1(Nth1Ix,1..10,Nth1Elem,Nth1Rest)), println('nth1/4'=Nth1_4), % numlist/4 numlist(1,10,Numlist), println(numlist=Numlist), % perm/2 % Note: Picat has util.permutation/2 Perm = findall([P],perm(1..3,P)), println(perm=Perm), % perm2/2 Perm2 = findall([Perm2Out1,Perm2Out2],perm2(a,b,Perm2Out1,Perm2Out2)), println(perm2=Perm2), % remove_dups/2 % Note: Picat has remove_dups/1 % As this is implemented (via bp.sort) then the outout is not in stable order % (but Picat's remove_dups/1 is). RemoveDupsList = [a,a,b,b,3,4,e,e,e,e,f,f,f,f,f,f], remove_dups(RemoveDupsList,RemoveDups), println(remove_dups=RemoveDups), println('remove_dups/1'=RemoveDupsList.remove_dups), % rev/2 % reverse/2 % Note: Picat has reverse/1 rev("hakank",Rev), println(rev=Rev), reverse("hakank",Reverse), println(reverse=Reverse), % same_length/2 if same_length(1..3,"abc") then println(same_length=ok) else println(same_length=not_ok) end, if same_length(1..3,"abcd") then println(same_length=not_ok) else println(same_length=ok) end, % select/4 (not select/3!) Select = findall([X,YList], select(X,1..4,3,YList)), println(select=Select), if shorter_list(1..3,"abcd") then println(shorter_list=ok) else println(shorter_list=not_ok) end, if shorter_list(1..3,"abc") then println(shorter_list=not_ok) else println(shorter_list=ok) end, if shorter_list(1..3,"ab") then println(shorter_list=not_ok) else println(shorter_list=ok) end, % subseq/3 Subseq = findall([X,Y],subseq(1..3,X,Y)), println(subseq=Subseq), subseq(1..5,Subseq2,[2,3]), println(subseq=Subseq2), % subseq0/2 Subseq0 = findall(X,subseq0(1..3,X)), println(subseq0=Subseq0), % subseq1/2 Subseq1 = findall(X,subseq1(1..3,X)), println(subseq1=Subseq1), % sumlist/2 % Note: Picat has sum/1 sumlist(1..2**10,Sumlist), println(sumlist=Sumlist), nl.