Умножение двух списков вещественных чисел - Prolog
Формулировка задачи:
Не могу организовать умножение двух списков.
есть код который я очень долго мучал
Подскажите плиз как реализовать
Листинг программы
- run :- write('задайте длину списка '), read(N), vvodlist(N,L), vvodlist2(N,L2),
- write('L= '), write(L), nl,
- write('L2= '), write(L2), nl,
- list1(L,L2,P),
- write('matr= '), write(P),nl,
- sort_p(LLL,SL),
- write('Конечный список= '),write(SL).
- vvodlist(0,[ ]).
- vvodlist(N,L) :-N>0,write('введите элемент списка: '), read(X),
- N1 is N-1, vvodlist(N1,L1), append(L1,[X],L).
- vvodlist2(0,[]).
- vvodlist2(N,L2) :-N>0,write('введите элемент списка2: '), read(X),
- N1 is N-1, vvodlist2(N1,L1), append(L1,[X],L2).
- append([ ],L,L).
- append([H|L],M,[H|R]):- append(L,M,R).
- append2([],L,L).
- append2([H|L],M,[H|R]):- append2(L,M,R).
- list1([X],X):-!.
- list1([H|T],P):-
- list1(T,P1),
- P is H*P1.
- sort_p(L3,SL):-perest(L3,K), !, sort_p(K,SL).
- sort_p(SL,SL).
- perest([X,Y|T],[Y,X|T]):-X>Y.
- perest([Z|T],[Z|T1]):-perest(T,T1).
Решение задачи: «Умножение двух списков вещественных чисел»
textual
Листинг программы
- domains
- int=integer
- intl=int*
- predicates
- lmult(intl,intl,intl)
- clauses
- lmult([],_,[]):- !.
- lmult(_,[],[]):- !.
- lmult([H1|T1],[H2|T2],[H|T]) :- H=H1*H2, lmult(T1,T2,T).
Объяснение кода листинга программы
Код выполняет умножение двух списков вещественных чисел. В коде определены следующие сущности:
- Домены:
- int=integer - это домен, представляющий вещественные числа.
- intl=int* - это домен, представляющий список вещественных чисел.
- Предикаты:
- lmult(intl,intl,intl) - это предикат, выполняющий умножение двух списков.
- Клаузы:
- lmult([],_,[]):- !. - это клауза, которая обрабатывает случай, когда первый список пуст.
- lmult(_,[],[]):- !. - это клауза, которая обрабатывает случай, когда второй список пуст.
- lmult([H1|T1],[H2|T2],[H|T]) :- H=H1*H2, lmult(T1,T2,T). - это клауза, которая рекурсивно вызывает себя для обработки остальных элементов списков. Здесь H1 и H2 представляют собой текущие элементы списков, а H - результат их умножения. Также здесь T1, T2 и T - это остатки списков после обработки текущих элементов. Таким образом, код работает следующим образом:
- Если первый список пуст, то возвращается пустой список.
- Если второй список пуст, то возвращается пустой список.
- Если оба списка пусты, то возвращается пустой список.
- Если первый список не пуст, то:
- текущий элемент первого списка умножается на текущий элемент второго списка.
- оставшаяся часть первого списка передается в рекурсивный вызов предиката lmult.
- оставшаяся часть второго списка передается в рекурсивный вызов предиката lmult.
- результат рекурсивных вызовов объединяется с результатами умножения текущих элементов и возвращается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д