Умножение двух списков вещественных чисел - Prolog

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

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

Не могу организовать умножение двух списков. есть код который я очень долго мучал
Листинг программы
  1. run :- write('задайте длину списка '), read(N), vvodlist(N,L), vvodlist2(N,L2),
  2. write('L= '), write(L), nl,
  3. write('L2= '), write(L2), nl,
  4. list1(L,L2,P),
  5. write('matr= '), write(P),nl,
  6. sort_p(LLL,SL),
  7. write('Конечный список= '),write(SL).
  8. vvodlist(0,[ ]).
  9. vvodlist(N,L) :-N>0,write('введите элемент списка: '), read(X),
  10. N1 is N-1, vvodlist(N1,L1), append(L1,[X],L).
  11. vvodlist2(0,[]).
  12. vvodlist2(N,L2) :-N>0,write('введите элемент списка2: '), read(X),
  13. N1 is N-1, vvodlist2(N1,L1), append(L1,[X],L2).
  14. append([ ],L,L).
  15. append([H|L],M,[H|R]):- append(L,M,R).
  16. append2([],L,L).
  17. append2([H|L],M,[H|R]):- append2(L,M,R).
  18. list1([X],X):-!.
  19. list1([H|T],P):-
  20. list1(T,P1),
  21. P is H*P1.
  22. sort_p(L3,SL):-perest(L3,K), !, sort_p(K,SL).
  23. sort_p(SL,SL).
  24. perest([X,Y|T],[Y,X|T]):-X>Y.
  25. perest([Z|T],[Z|T1]):-perest(T,T1).
Подскажите плиз как реализовать

Решение задачи: «Умножение двух списков вещественных чисел»

textual
Листинг программы
  1. domains
  2. int=integer
  3. intl=int*
  4.  
  5. predicates
  6. lmult(intl,intl,intl)
  7.  
  8. clauses
  9. lmult([],_,[]):- !.
  10. lmult(_,[],[]):- !.
  11. lmult([H1|T1],[H2|T2],[H|T]) :- H=H1*H2, lmult(T1,T2,T).

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

Код выполняет умножение двух списков вещественных чисел. В коде определены следующие сущности:

  1. Домены:
    • int=integer - это домен, представляющий вещественные числа.
    • intl=int* - это домен, представляющий список вещественных чисел.
  2. Предикаты:
    • lmult(intl,intl,intl) - это предикат, выполняющий умножение двух списков.
  3. Клаузы:
    • lmult([],_,[]):- !. - это клауза, которая обрабатывает случай, когда первый список пуст.
    • lmult(_,[],[]):- !. - это клауза, которая обрабатывает случай, когда второй список пуст.
    • lmult([H1|T1],[H2|T2],[H|T]) :- H=H1*H2, lmult(T1,T2,T). - это клауза, которая рекурсивно вызывает себя для обработки остальных элементов списков. Здесь H1 и H2 представляют собой текущие элементы списков, а H - результат их умножения. Также здесь T1, T2 и T - это остатки списков после обработки текущих элементов. Таким образом, код работает следующим образом:
  4. Если первый список пуст, то возвращается пустой список.
  5. Если второй список пуст, то возвращается пустой список.
  6. Если оба списка пусты, то возвращается пустой список.
  7. Если первый список не пуст, то:
    • текущий элемент первого списка умножается на текущий элемент второго списка.
    • оставшаяся часть первого списка передается в рекурсивный вызов предиката lmult.
    • оставшаяся часть второго списка передается в рекурсивный вызов предиката lmult.
    • результат рекурсивных вызовов объединяется с результатами умножения текущих элементов и возвращается.

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


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

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

9   голосов , оценка 4 из 5

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

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

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