Пролог добавить в список, если элемент не равен строке

Я пытаюсь создать список пар, которые имеют ненулевой элемент Guard.

get_only_guarded(L) :-
    Guard \= null,
    findall([S,D],transition(S,D,_,Guard,_),L).

Это то, что я пытался, но это не похоже на работу. Какой будет правильный путь?

2 ответа

Использование dif(Guard,null) вместо. Справиться (\=)/2 с осторожностью!

Более "обычный" способ сделать это: протолкнуть тест после создания экземпляра

get_only_guarded(L) :-
    findall([S,D], (transition(S,D,_,Guard,_),Guard \= null), L).
Другие вопросы по тегам