znajdź wszystkie podzbiory listy długości K w prologu

muszę znaleźć podzbiór listy o długości k w prologu, mam tę funkcję:

    subset([], []).
    subset([E|Tail], [E|NTail]):-
    subset(Tail, NTail).
    subset([_|Tail], NTail):-
    subset(Tail, NTail).

i stosuję inną regułę dla długości listy,

    length(Xs,Size)

problem polega na tym, że jest on bardzo powolny, ponieważ szuka podzbioru długości, czy istnieje bezpośrednia rekurencyjna definicja tego podzbioru o długości k?

Szukałem go przez tydzień i nic nie mogę znaleźć

questionAnswers(1)

yourAnswerToTheQuestion