Как обобщить программу по арности в прологе? - PullRequest
0 голосов
/ 10 мая 2011

Я использую SWI пролог.У меня есть такая база фактов, которая состоит из фактов с арностью 4.

attribute(a1,a2,a3,a4).
data(yes,no,no,no).
data(yes,no,yes,no).
data(yes,yes,yes,no).
data(yes,yes,yes,yes).
data(no,yes,yes,yes).

И мой код вычисляет вероятность Результата, когда я вызываю pbayes (да, нет, нет, нет, Результат);1005 *

Я пытаюсь обобщить мой код, чтобы решить проблемы с разными арностями.

Например, счетчик арности может быть равен 6 на самом деле, например:

attribute(a1,a2,a3,a4,a5,a6).
data(yes,yes,yes,no,no,no).
data(yes,yes,yes,no,no,yes).

Моя программа должна приспособиться к арности.Ты хоть представляешь, как мне этого добиться?

1 Ответ

0 голосов
/ 10 мая 2011

помещает все аргументы в список как

attribute([a1,a2,a3,a4,a5,a6]).
data([yes,yes,yes,no,no,no]).
data([yes,yes,yes,no,no,yes]).

, а затем рекурсивно обработать данные - это то, что я бы сделал.

если по какой-то причине вы хотите иметь предикаты с разными арностями, вы можете использовать оператор = .. / 2 , чтобы получить аргументы в списке и затем обработать их

или вы можете написать код для каждой арности XD

...