Подводить данные из фактов - PullRequest
0 голосов
/ 07 марта 2020

(Учитывая список фильмов, напишите правило PROLOG, чтобы добавить и отобразить общее количество поступлений.) Это мой вопрос. Я в основном пытаюсь добавить целочисленное значение, чтобы получить список фильмов из списка ниже. Я довольно новичок в Прологе и не очень понимаю, как все это работает.

takings(air_force_one,315000000).
takings(american_beauty,336000000).
takings(american_pie,201700000).
takings(american_wedding,230700000).
takings(armageddon,554600000).
takings(as_good_as_it_gets,313300000).
takings(austin_powers_in_goldmember,289000000).
takings(babe,249000000).
takings(back_to_the_future,350600000).
takings(back_to_the_future_part_ii,332000000).
takings(back_to_the_future_part_iii,243700000).
takings(robots,245600000).
takings(hulk,241700000).
takings(bad_boys_ii,261900000).

Правило, которое я написал до сих пор, работает только для одного mov ie. Пример:

?-  score([robots],Y).
    Y = 245600000.

?- score([robots,hulk],Y).
false.

?- score([robots,hulk,bad_boys__ii],Y).
false.

Правило написано:

score([Movies], Money):-
    findall(Profit,(takings(Movies, Profit)), ListOfProfit),
    sum_list(ListOfProfit, Money).


Связанный вопрос запрос на рекурсивный ответ.

1 Ответ

0 голосов
/ 07 марта 2020

То, что вы ищете:

score(Movies,Total) :-
    findall(Money,(member(Movie,Movies),takings(Movie,Money)),Profit),
    sum_list(Profit,Total).

Необходимые детали:

  1. Вы можете добавить в цель более простого запроса для findall / 3 Например,
(member(Movie,Movies),takings(Movie,Money))
[Movies] используется неправильно при необходимости. Это должно быть просто Movies

Пример выполнения

?- score([robots,hulk,bad_boys_ii],Y).
Y = 749200000.
...