Итак, для моего проекта судоку у меня есть список, например:
L = [_G1-0:0:0,_G19-0:6:2,_G22-0:7:2,_G25-0:8:2].
, и я хочу отфильтровать это, чтобы получить только свободные переменные:
[_G1, _G19, _G22 and _G25].
Итак, желая этого, я написал этот предикат:
remove_position([], []) :- !.
remove_position([X-_|Xs], [X|Rs]) :- remove_position(Xs, Rs).
При вызове
?- remove_position(L, Result).
SWI-Prolog отвечает
false.
Поэтому я немного отредактировал предикат:
remove_position([], []) :- !.
remove_position([X-_:_:_|Xs], [X|Rs]) :- remove_position(Xs, Rs).
и теперь все работает как положено:
?- remove_position(L, Result).
Result = [_G1, _G19, _G22, _G25].
Тем не менее, я не вижу, что не так с первым, для меня SWI-Prolog должен соответствовать 0:0: 0 с _ так же, как с _: _: _.Есть что-то, чего я не получаю?Или это ошибка SWI-Prolog?
Спасибо за просвещение!