Найти скалярное произведение векторов - Lisp
Формулировка задачи:
Сформировать в виде файла два вектора размерности не более 8, найти их скалярное произведение и ответ записать в файл
есть нечто похожее для разности двух векторов
Файлы для входных данных.
Файл 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)
(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))
Решение задачи: «Найти скалярное произведение векторов»
textual
Листинг программы
(apply '+ (mapcar '* v1 v2))
Объяснение кода листинга программы
В данном коде используется функция apply
, которая применяет функцию, указанную в первом аргументе, к списку аргументов, указанных в последующих аргументах. В данном случае функция +
будет применена к каждому элементу списка, который был получен с помощью функции mapcar
, которая применяет функцию *
к каждому элементу векторов v1
и v2
. Таким образом, результатом выполнения данного кода будет скалярное произведение векторов v1
и v2
.
Список элементов кода:
(apply '+ (mapcar '* v1 v2))
- начало кодаv1
иv2
- векторы, скалярное произведение которых необходимо найти(mapcar '* v1 v2)
- результат применения функции*
к каждому элементу векторовv1
иv2
apply '+
- применение функции+
к каждому элементу списка, полученного на предыдущем шаге- Результат выполнения кода - скалярное произведение векторов
v1
иv2
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д