Prolog List Plateau

Acabo de presentarme al prólogo, tratando de realizar algunos ejercicios simples, pero me he quedado atascado en este. Estoy tratando de escribir un programa que muestre todas las sublistas de la lista de entrada, donde cada sublista tiene una longitud> 1 y no se puede extender a una sublista más grande. También mostrará la posición inicial en la lista de la sublista. Entonces una salida de muestra sería

| ?- plateau([a,a,b,2,2,2,a+1,a+1,s(1,2)], I, Len).
    I = 1,
    Len = 2 ? ;
    I = 4,
    Len = 3 ? ;
    I = 7,
    Len = 2 ? ;
    no

Todavía estoy bastante confundido por todo lo declarativo, y tengo muchos problemas para cambiar del modo imperativo. Estoy pensando que quiero que mi programa haga algo como

program([H|T],I,L):-
    T = [H1|T1] %split the tail
    ([H] = [H1] -> Count is Count+1, program(T,I,Count) 
     %if First element = second element, recurse with new values
    ; length(T,Spot), 
      %get the spot where you are in the list, so we know where sublist starts
      program(T,Spot,L) %run again, from tail, since sublist didn't have another  element?
program([],I,L). %terminate when entire list has been run through?

Así que esto no funciona, por lo que puedo decir por un par de razones. No reinicio el 'conteo', ¿entonces es posible que sume los valores de todas las sublistas juntas? ¿Hay alguna forma de evitar esto? Mi caso base también podría no ser lo que quiero: ¿no estoy seguro de lo que debería ser realmente? Probablemente también me faltan otras cosas ... ¡cualquier ayuda es muy apreciada! :) ¡Gracias

Respuestas a la pregunta(10)

Su respuesta a la pregunta