Есть ли способ консолидировать факты?

Есть ли способ сделать это:

genre(blues).
gere(hiphop).
genre(rock).

В чем-то вроде этого:

genre(blues;hiphop;rock).

* Я знаю, что это не работает, но что-то похожее на это существует.

3 ответа

Вы не можете консолидировать факты, но вы можете превратить их в простое правило, например:

genre(X) :- member(X, [blues, hiphop, rock]).

member/2 является встроенным предикатом списка в SWI для проверки членства в списке.


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

test_list( _, [] ).
test_list( F, [H|T] ) :- P =.. [F,H], P, test_list( F, T ).


Вы можете использовать этот синтаксис

genre(X) :- X=blues ; X=hiphop ; X=rock.

но лично я советую члену /2 пути...

licensed under cc by-sa 3.0 with attribution.