encontrar todos los subconjuntos de longitud k de lista en prólogo

Necesito encontrar un subconjunto de longitud k de lista en prólogo, tengo esta función:

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

y aplico otra regla para la longitud de la lista,

    length(Xs,Size)

el problema es que es muy lento porque busca un subconjunto de longitud completa, ¿existe una definición recursiva directa para este subconjunto de longitud k?

Lo busqué por una semana y no puedo encontrar nada

Respuestas a la pregunta(1)

Su respuesta a la pregunta