[Turbo Prolog] Заполнение списка пятью элементами по формуле A(N)=1/N
Формулировка задачи:
Добрый вечер.
Суть задачи:
Составьте программу заполнения списка пятью элементами, которые вычисляются по формуле A(N)=1/N.
Есть код программы:
Программа считает неправильно в функции calc, не могу никак понять как уменьшать H для следующего деления. Подскажи, пожалуйста, как подправить. Спасибо.
Листинг программы
- domains
- list = real*.
- predicates
- append(list,list,list).
- calc(real,real,list).
- result(real,list).
- clauses
- append([],E,E).
- append([H|L1],L2,[H|L3]):-append(L1,L2,L3).
- calc(_,0,[]).
- calc(B,N,[H|T]):-H = 1/B, N1 = N-1, calc(H,N1,T).
- result(B,L):-N = B-1, calc(B,N,T),append([B],T,L).
немного поправил
подскажите, пожалуйста, как избежать деления на 0?
Листинг программы
- domains
- list = real*.
- predicates
- append(list,list,list).
- calc(real,real,list).
- result(real,list).
- clauses
- append([],E,E).
- append([H|L1],L2,[H|L3]):-append(L1,L2,L3).
- calc(_,0,[]).
- calc(B,N,[H|T]):-H = 1/B, B1 = B-1,N1 = N-1, calc(B1,N1,T).
- result(B,L):-N = B-1, calc(B,N,T),append([B],T,L).
Решение задачи: «[Turbo Prolog] Заполнение списка пятью элементами по формуле A(N)=1/N»
textual
Листинг программы
- domains
- rl=real*
- int=integer
- predicates
- mklist(int,int,rl)
- task(int,rl)
- clauses
- mklist(N,N,[Q]) :- Q=1/N, !.
- mklist(N,M,[H|T]) :- M1=M+1, H=1.0/M, mklist(N,M1,T).
- task(N,R) :- mklist(N,1,R).
Объяснение кода листинга программы
- В данном коде используется язык программирования Prolog.
- Код содержит два домена: rl (реальные числа) и int (целые числа).
- У него есть две предположительные функции: mklist и task.
- Функция mklist принимает три аргумента: N (размер списка), M (номер элемента, который обрабатывается в рекурсии) и R (результат).
- Есть два случая в функции mklist:
- Если N равно M, то возвращается Q, равное 1/N.
- Если N больше M, то H (значение элемента) равно 1.0/M, а затем вызывается функция mklist с новыми значениями N и M1 (M+1).
- Функция task принимает два аргумента: N (размер списка) и R (результат).
- В функции task вызывается функция mklist с аргументами N и 1 (начальный размер списка).
- Результатом работы программы будет список из пяти элементов, где каждый элемент будет равен 1.0/N.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д