seq([]) --> []. seq([C|Cs]) --> [C], seq(Cs). :- phrase(seq([1,2,3,4]),Xs), Xs = [1,2,3,4]. :- phrase(seq(`abcd`),`abcd`). invseq([]) --> []. invseq([C|Cs]) --> invseq(Cs), [C]. :- phrase(invseq(`abcd`),Xs), Xs=`dcba`. palindrom --> seq(Xs), invseq(Xs). palindrom --> seq(Xs), [_], invseq(Xs). :- phrase(palindrom,`abba`). palindrom2 --> []. palindrom2 --> [_]. palindrom2 --> [X], palindrom2, [X]. :- phrase(palindrom2,`abba`). genom(Cs) :- Cs = `ATAGTCTAGTGATGAGTATGGCAAAGAGGTCAACCCGTTCCATACCGAACACGGAAGTTAAGCTCTTTAGCGCCGATGGTAGTTGGGGGCTTCCCCCTGTGAGAGTAGGACGTCGCTAGGCATAATACCAGGAGGATTAGCTCAGCTGGGAGAGCATCTGCCTTACAAGCAGAGGGTGGCGGTTCGAGCCGCGCCATCCTCCACCATATGCCGGTTTAGCTCAGCAGGTAGAGCAACTGACTTGTAATCAGTAGGTCGTGGGTTCGATTCCTATAGCCGGCACCATTTTTTTCGAGCCATAGCTCAGTTGGTAGAGCATCTGACTTTTAATCAGAGGGTCGAAGGTTCGAGTCCTTCATGGCTCACCATTATAAATAATAATAATAAGCGGTGTGGAATTGGCAGACGCACTAACTTAGGATCTACCGCCGCAAGGCGTGGGGCTCGACTCCCTGACCGCACCATTATTTTCATTGCCAGATAAAAAA`. base --> "A". base --> "C". base --> "G". base --> "T". basen --> "". basen --> base, basen. :- genom(Cs), phrase(basen,Cs). tandemrepeat(Alpha) --> seq(Alpha), seq(Alpha), {dif(Alpha,[])}. :- phrase(tandemrepeat(Xs),`ACTACT`), Xs = `ACT`. :- \+ phrase(tandemrepeat([]), _Bs). :- \+ phrase(tandemrepeat(``),``). subseq_tandemrepeat(Alpha) --> seq(_Prefix), tandemrepeat(Alpha), seq(_Suffix). :- genom(Genom), phrase(subseq_tandemrepeat(Alpha),Genom), Alpha=`TGA`. :- genom(Genom), phrase(subseq_tandemrepeat(Alpha),Genom), \+ length(Alpha,4).