У меня есть два комплектаПролог: проверка если несвязанный набор является подмножеством связанного набора
Set1 = [stone(X), active(X), stone(Y), in(app2,Y), unlocked(app2)]
Set2 = [stone(s1), active(s1), stone(s2), in(app2,s2), unlocked(app2)]
Я хочу, чтобы моя программа признать, что 1 может быть подмножеством 2, если X связан с s1 и Y к s2.
Функция подмножества от library(sets)
не может этого сделать, поскольку она не может генерировать подмножества.
Я начал играть с реализацией моей собственной функции подмножества, которая создавала бы все возможные привязки, но у меня нет большого опыта в Prolog, и функция становится очень длинной и явно неэффективной.
закончил с использованием subsetA ([], _). subsetA ([H | T], S): - member_set (H, S), subsetA (T, S). на основе вашего ответа, и, похоже, это трюк. Спасибо! – bamboo10
@ Nieszka Glad Я мог бы помочь. Однако, в зависимости от вашей реализации Prolog, сортировка может быть очень эффективной (реализована на C), в то время как 'member' должен проходить весь список, который вы проверяете каждый раз. –
Спасибо @Boris! На данный момент я нахожусь в напряженном графике, пытаясь закончить его до крайнего срока, но я планирую продолжить свой срок, так что это обязательно пригодится! – bamboo10