The series of increasing prime numbers begins: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, ...

The task applies a filter to the series returning groups of successive primes, (s'primes), that differ from the next by a given value or values.

Example 1: Specifying that the difference between s'primes be 2 leads to the groups:

(3, 5), (5, 7), (11, 13), (17, 19), (29, 31), ...

(Known as Twin primes or Prime pairs)

Example 2: Specifying more than one difference between s'primes leads to groups of size one greater than the number of differences. Differences of 2, 4 leads to the groups:

(5, 7, 11), (11, 13, 17), (17, 19, 23), (41, 43, 47), .... 

In the first group 7 is two more than 5 and 11 is four more than 7; as well as 5, 7, and 11 being successive primes.
Differences are checked in the order of the values given, (differences of 4, 2 would give different groups entirely).

Task

 In each case use a list of primes less than 1_000_000
 For the following Differences show the first and last group, as well as the number of groups found:
 Differences of 2.
 Differences of 1.
 Differences of 2, 2.
 Differences of 2, 4.
 Differences of 4, 2.
 Differences of 6, 4, 2.
 Show output here.

Note: Generation of a list of primes is a secondary aspect of the task. Use of a built in function, well known library, or importing/use of prime generators from other Rosetta Code tasks is encouraged.

references
https://pdfs.semanticscholar.org/78a1/7349819304863ae061df88dbcb26b4908f03.pdf
https://www.primepuzzles.net/puzzles/puzz_011.htm
https://matheplanet.de/matheplanet/nuke/html/viewtopic.php?topic=232720&start=0
main =>
  Num is 1_000_000,
  statistics(runtime,[Start|_]),
  PrimeList = primes(Num),
  NumPrimes = PrimeList.len,
  statistics(runtime,[Stop|_]),
  RunTime = Stop - Start,
  printf("There are %w primes until %w [time(ms) %w]%n",NumPrimes, Num, RunTime),
  DiffList = [[1], [2], [2,2], [2,4], [4,2], [2,4,6],
              [2,6,4], [4,2,6], [4,6,2], [6,2,4], [6,4,2],[6,4,2,4]],
  run(DiffList, PrimeList).
 
primesByDiffs([],_,[]).
primesByDiffs([Prime|Primes], Diff, [Slide|Slides]):-
  Slide = new_list(Diff.len+1),
  append(Slide, _, [Prime|Primes]),
  select(Diff, Slide),!,
  primesByDiffs(Primes, Diff, Slides).
primesByDiffs([_|Primes], Diff, Slides):-
  primesByDiffs(Primes, Diff, Slides).
 
select([],_).
select([Diff|Diffs],[S1, S2|Stail]):-
  S2 = S1 + Diff,
  select(Diffs, [S2|Stail]).
 
run([],_).
run([Diff|Dtail], PrimeList):-
  statistics(runtime,[Start|_]),
  primesByDiffs(PrimeList, Diff, SlideList),	
  Num = SlideList.len,
  statistics(runtime,[Stop|_]),
  Runtime = Stop - Start,
  printf("%-10w number: %5w (%2wms) first: %-22w last: %-22w\n", Diff, Num, Runtime, SlideList.first, SlideList.last),
  !,
  run(Dtail, PrimeList).