Найти скалярное произведение векторов - Lisp

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

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

Сформировать в виде файла два вектора размерности не более 8, найти их скалярное произведение и ответ записать в файл есть нечто похожее для разности двух векторов
(defun lab3 ()
(setq f1 (open "~/v1.txt"))
(setq v1 (read f1))
(close f1)
(setq f2 (open "~/v2.txt"))
(setq v2 (read f2))
 (close f2)
(setq f3 (open "~/out.txt" :direction :output))
(if (= (len v1) (len v2))
(setq res (sub-vect v1 v2))
  )
(print res f3)
(close f3)
)
(defun sub-vect (v1 v2)
(mapcar (lambda (x) (apply '- x)) (mapcar 'list v1 v2)))
(defun len (L)
(loop for i in L sum 1))
Файлы для входных данных. Файл v1.txt : (1 2 3 4 5 6 0 8) Файл v2.txt : (1 0 3 4 5 6 7 8) Файлы с выходными данными. Файл out.txt : (0 2 0 0 0 0 -7 0)

Решение задачи: «Найти скалярное произведение векторов»

textual
Листинг программы
(apply '+ (mapcar '* v1 v2))

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

В данном коде используется функция apply, которая применяет функцию, указанную в первом аргументе, к списку аргументов, указанных в последующих аргументах. В данном случае функция + будет применена к каждому элементу списка, который был получен с помощью функции mapcar, которая применяет функцию * к каждому элементу векторов v1 и v2. Таким образом, результатом выполнения данного кода будет скалярное произведение векторов v1 и v2. Список элементов кода:

  1. (apply '+ (mapcar '* v1 v2)) - начало кода
  2. v1 и v2 - векторы, скалярное произведение которых необходимо найти
  3. (mapcar '* v1 v2) - результат применения функции * к каждому элементу векторов v1 и v2
  4. apply '+ - применение функции + к каждому элементу списка, полученного на предыдущем шаге
  5. Результат выполнения кода - скалярное произведение векторов v1 и v2

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

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