Определить функцию работы с векторами: Сложение векторов, разность, умножение на скаляр,скалярное произведение векторов,вычисление длины вектора - Lisp

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

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

с помощью фукнций map/ map-into / reduce определить функцию работы с векторами: Сложение векторов, разность, умножение на скаляр,скалярное произведение векторов,вычисление длины вектора

Решение задачи: «Определить функцию работы с векторами: Сложение векторов, разность, умножение на скаляр,скалярное произведение векторов,вычисление длины вектора»

textual
Листинг программы
;; Сложение векторов
 
(defun add-vect (v1 v2)
  (mapcar #'(lambda (x) (apply '+ x)) (mapcar 'list v1 v2)))
 
==> add-vect
 
(add-vect '(1 2 3) '(4 5 6))
 
==> (5 7 9)
 
;; Вычитание 
 
(defun sub-vect (v1 v2)
  (mapcar #'(lambda (x) (apply '- x)) (mapcar 'list v1 v2)))
 
==> sub-vect
 
(sub-vect '(1 2 3) '(4 5 6))
 
==> (-3 -3 -3)
 
;; умножение на скаляр
 
(defun sm-vect (s v)
  (mapcar #'(lambda (x) (* x s)) v))
 
==> sm-vect
 
(sm-vect 3 '(1 2 3 4))
 
==> (3 6 9 12)
 
;; скалярное произведение
 
(defun sc-vect (v1 v2)
 (apply '+ (mapcar #'(lambda (x) (apply '* x)) (mapcar 'list v1 v2))))
 
==> sc-vect
 
(sc-vect '(1 2 3) '(4 5 6))
 
==> 32
 
;; модуль вектора
 
(defun vmod (v)
  (sqr (reduce #'(lambda (a x) (+ a (* x x))) v :initial-value 0)))  
 
==> vmod
 
(vmod '(1 2 3))
 
==> 3.74165738677394

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


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

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

10   голосов , оценка 4.2 из 5
Похожие ответы