Пролог саблистов между # - PullRequest
0 голосов
/ 02 мая 2020

У меня есть эта функция, которая извлекает подсписки между #, как это:

?- f([1,2,3,#,4,5,6,7,#,8,9,10],L).
L=[1,2,3];
L=[4,5,6,7];
L=[8,9,10];
false.

Однако, когда я вызываю ее с переменными, переменные объединяются с #, и поэтому я получаю кучу подсписков, как это

Fila = [#, _, _, _, _, _, #, _, #, _, _, _],
|    espaco_fila(Fila, Espaco).
Fila = [#, _2456, _2462, _2468, #, _2480, #, _2492, #|...],
Espaco = [_2456, _2462, _2468],
dif(_2456, #),
dif(_2462, #),
dif(_2468, #) ;
Fila = [#, _2604, _2610, _2616, _2622, #, #, _2640, #|...],
Espaco = [_2604, _2610, _2616, _2622],
dif(_2604, #),
dif(_2610, #),
dif(_2616, #),
dif(_2622, #) ;
Fila = [#, _2758, _2764, _2770, _2776, _2782, #, _2794, #|...],
Espaco = [_2758, _2764, _2770, _2776, _2782],
dif(_2758, #),
dif(_2764, #),
dif(_2770, #),
dif(_2776, #),
dif(_2782, #) ;
Fila = [#, #, _2456, _2462, _2468, #, #, _2486, #|...],
Espaco = [_2456, _2462, _2468],
dif(_2456, #),
dif(_2462, #),
dif(_2468, #) ;
Fila = [#, #, _2610, _2616, _2622, _2628, #, _2640, #|...],
Espaco = [_2610, _2616, _2622, _2628],
dif(_2610, #),
dif(_2616, #),
dif(_2622, #),
dif(_2628, #) ;
Fila = [#, _2456, #, _2468, _2474, _2480, #, _2492, #|...],
Espaco = [_2468, _2474, _2480],
dif(_2468, #),
dif(_2474, #),
dif(_2480, #) ;
Fila = [#, _2456, _2462, _2468, _2474, _2480, #, _2492, #|...],
Espaco = [_2504, _2510, _2516],
dif(_2504, #),
dif(_2510, #),
dif(_2516, #) ;
false.

Я беру подсписки, используя эти

append([Esp, [#|_]], Fila)
append([_,[#],Esp, [#|_]], Fila)
append([_,[#],Esp], Fila)

Есть ли способ заставить их игнорировать переменные и смотреть только на константу #?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...