Как извлечь данные из многодоменной структуры данных в составе списка? - Prolog

Узнай цену своей работы

Формулировка задачи:

Друзья, помогите советом. Я застрял. Задача звучит следующим образом: Пусть имеется список структур «кл»: [кл (а, 29, 3), кл (b, 29, 6), кл (с, 40, 2), кл (d, 35, 6), кл (e, 24, 3), кл (f, 31, 2)]. Первым аргументом каждой структуры служит имя клиента, вторым – суточный тариф, а третьим – количество дней, которое используется автомашина. Напишите правило, позволяющее вычислить итоговую сумму оплаты, объединяющую выплаты всех клиентов, данные о которых содержатся в списке. Я рисую код:
Листинг программы
  1. domains
  2. name = symbol
  3. price,days,summa = integer
  4. client = human(name,price,days)
  5. list = client*
  6. predicates
  7. spisok(list)
  8. header(list,client)
  9. rez
  10. summa(price,days,summa)
  11. clauses
  12. spisok([human(a, 29, 3),
  13. human(b, 29, 6),
  14. human(c, 40, 2),
  15. human(d, 35, 6),
  16. human(e, 24, 3),
  17. human(f, 31, 2)]).
  18. summa(P,D,S):-S=P*D, write(S).
  19. rez:- spisok(A),
  20. header(A,C),
  21. write("Ok",C),nl.
  22. header([H|T],C):-
  23. write(H),nl,/* в этом месте засада*/
  24. not(T=[]),
  25. header(T,C).
Дело в том, что когда я выделил один элемент из списка (структура вида human(a, 29, 3)) я не могу обратиться к ее содержимому. Просто не знаю как. Могу только в диалог вывести строчку целиком, а мне надо отдельно умножит 29 на 3. КАК? Работаю в Турбо-прологе 2

Решение задачи: «Как извлечь данные из многодоменной структуры данных в составе списка?»

textual
Листинг программы
  1. %SWI-PROLOG 7.1.26
  2. sum_kl([],0).
  3. sum_kl([kl(_,T,D)|L],R) :-
  4.     sum_kl(L,Z),
  5.     R is Z + (T * D).

Объяснение кода листинга программы

Код представлен в виде рекурсивной функции с названием sum_kl, которая принимает два аргумента: список L и число R. Если список пуст, то рекурсия завершается и возвращается 0. В противном случае, функция рекурсивно вызывается для списка L и переменной Z, а затем результат суммируется с произведением T и D и присваивается переменной R. Вот список, описывающий код:

  1. Название функции: sum_kl
  2. Аргументы функции: [L, R]
  3. Описание рекурсивного случая: Если список пуст, то возвращается 0.
  4. Описание итеративного случая: Рекурсивно вызывается функция sum_kl для списка L и переменной Z.
  5. Расчет значения переменной R: R = Z + (T * D)
  6. Возвращаемое значение: R

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.692 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы