[Turbo Prolog] Заполнение списка пятью элементами по формуле A(N)=1/N

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

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

Добрый вечер. Суть задачи: Составьте программу заполнения списка пятью элементами, которые вычисляются по формуле A(N)=1/N. Есть код программы:
Листинг программы
  1. domains
  2. list = real*.
  3. predicates
  4. append(list,list,list).
  5. calc(real,real,list).
  6. result(real,list).
  7. clauses
  8. append([],E,E).
  9. append([H|L1],L2,[H|L3]):-append(L1,L2,L3).
  10. calc(_,0,[]).
  11. calc(B,N,[H|T]):-H = 1/B, N1 = N-1, calc(H,N1,T).
  12. result(B,L):-N = B-1, calc(B,N,T),append([B],T,L).
Программа считает неправильно в функции calc, не могу никак понять как уменьшать H для следующего деления. Подскажи, пожалуйста, как подправить. Спасибо.
немного поправил подскажите, пожалуйста, как избежать деления на 0?
Листинг программы
  1. domains
  2. list = real*.
  3. predicates
  4. append(list,list,list).
  5. calc(real,real,list).
  6. result(real,list).
  7. clauses
  8. append([],E,E).
  9. append([H|L1],L2,[H|L3]):-append(L1,L2,L3).
  10. calc(_,0,[]).
  11. calc(B,N,[H|T]):-H = 1/B, B1 = B-1,N1 = N-1, calc(B1,N1,T).
  12. result(B,L):-N = B-1, calc(B,N,T),append([B],T,L).

Решение задачи: «[Turbo Prolog] Заполнение списка пятью элементами по формуле A(N)=1/N»

textual
Листинг программы
  1. domains
  2. rl=real*
  3. int=integer
  4.  
  5. predicates
  6. mklist(int,int,rl)
  7. task(int,rl)
  8.  
  9. clauses
  10. mklist(N,N,[Q]) :- Q=1/N, !.
  11. mklist(N,M,[H|T]) :- M1=M+1, H=1.0/M, mklist(N,M1,T).
  12.  
  13. task(N,R) :- mklist(N,1,R).

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

  1. В данном коде используется язык программирования Prolog.
  2. Код содержит два домена: rl (реальные числа) и int (целые числа).
  3. У него есть две предположительные функции: mklist и task.
  4. Функция mklist принимает три аргумента: N (размер списка), M (номер элемента, который обрабатывается в рекурсии) и R (результат).
  5. Есть два случая в функции mklist:
    • Если N равно M, то возвращается Q, равное 1/N.
    • Если N больше M, то H (значение элемента) равно 1.0/M, а затем вызывается функция mklist с новыми значениями N и M1 (M+1).
  6. Функция task принимает два аргумента: N (размер списка) и R (результат).
  7. В функции task вызывается функция mklist с аргументами N и 1 (начальный размер списка).
  8. Результатом работы программы будет список из пяти элементов, где каждый элемент будет равен 1.0/N.

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


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

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

14   голосов , оценка 3.857 из 5

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

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

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